{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Reproduce Leaf Counting\n",
    "# Keras Implementation of ResNet50V2\n",
    "\n",
    "# Varun Aggarwal\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ensures back compatibility\n",
    "from tensorflow.keras import backend as K\n",
    "\n",
    "\n",
    "# for reading and preprocessing data\n",
    "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
    "from tensorflow.keras.models import Model\n",
    "from tensorflow.keras.layers import Flatten, Dense, Dropout\n",
    "from tensorflow.keras.optimizers import Adam\n",
    "\n",
    "\n",
    "# ResNet50V2 model from keras with pretrained weights\n",
    "from tensorflow.python.keras.applications.resnet_v2 import ResNet50V2, preprocess_input\n",
    "\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "# for plots et al.\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from sklearn.metrics import classification_report, confusion_matrix\n",
    "\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sn\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# set these parameters\n",
    "\n",
    "dataset = 'LeafCount'\n",
    "modelName = 'ResNet50V2'\n",
    "\n",
    "load_weights = True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "DATASET_PATH  = '../dataset/'\n",
    "\n",
    "IMAGE_SIZE    = (256, 256)\n",
    "NUM_CLASSES   = 9  \n",
    "BATCH_SIZE    = 8\n",
    "NUM_EPOCHS    = 20\n",
    "WEIGHTS_FINAL = ''.join(['model-',modelName,'-',dataset,'.h5'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 6175 images belonging to 9 classes.\n",
      "Found 681 images belonging to 9 classes.\n"
     ]
    }
   ],
   "source": [
    "# specify data augmentation parameters for training images\n",
    "train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input,\n",
    "                                   rotation_range=30,\n",
    "                                   width_shift_range=0.2,\n",
    "                                   height_shift_range=0.2,\n",
    "                                   zoom_range=0.4,\n",
    "                                   horizontal_flip=True,\n",
    "                                   \n",
    "                                   fill_mode='nearest',\n",
    "                                   validation_split=0.1)\n",
    "train_batches = train_datagen.flow_from_directory(DATASET_PATH + '/train',\n",
    "                                                  target_size=IMAGE_SIZE,\n",
    "                                                  interpolation='bicubic',\n",
    "                                                  class_mode='categorical',\n",
    "                                                  shuffle=True,\n",
    "                                                  batch_size=BATCH_SIZE,\n",
    "                                                  subset=\"training\",\n",
    "                                                  classes=['1','2','3','4','5','6','7','8','9+'])\n",
    "\n",
    "valid_batches = train_datagen.flow_from_directory(DATASET_PATH + '/train',\n",
    "                                                  target_size=IMAGE_SIZE,\n",
    "                                                  interpolation='bicubic',\n",
    "                                                  class_mode='categorical',\n",
    "                                                  shuffle=True,\n",
    "                                                  batch_size=BATCH_SIZE,                                                                                         subset=\"validation\",\n",
    "                                                  classes=['1','2','3','4','5','6','7','8','9+'])\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "****************\n",
      "Class #0 = 1\n",
      "Class #1 = 2\n",
      "Class #2 = 3\n",
      "Class #3 = 4\n",
      "Class #4 = 5\n",
      "Class #5 = 6\n",
      "Class #6 = 7\n",
      "Class #7 = 8\n",
      "Class #8 = 9+\n",
      "****************\n"
     ]
    }
   ],
   "source": [
    "# show class indices\n",
    "\n",
    "\n",
    "print('****************')\n",
    "\n",
    "for cls, idx in train_batches.class_indices.items():\n",
    "    print('Class #{} = {}'.format(idx, cls))\n",
    "    \n",
    "print('****************')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# inceptionv3 - model setup\n",
    "\n",
    "model = ResNet50V2(include_top=False,\n",
    "                    weights='imagenet',\n",
    "                    input_tensor=None,\n",
    "                    input_shape=(IMAGE_SIZE[0], IMAGE_SIZE[1], 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ResNet model from keras with pretrained weights\n",
    "\n",
    "# adding final FC layer at the end of model\n",
    "\n",
    "x = model.output\n",
    "x = Flatten()(x)\n",
    "x = Dropout(0.5)(x)\n",
    "output_layer = Dense( NUM_CLASSES,\n",
    "                      activation='softmax',                     \n",
    "                      name='softmax')(x)\n",
    "\n",
    "model = Model(inputs=model.input,\n",
    "              outputs=output_layer)\n",
    "\n",
    "\n",
    "\n",
    "# ensure all layers are trainable\n",
    "for layer in model.layers:\n",
    "    layer.trainable = True\n",
    "\n",
    "# setting up optimizer for model\n",
    "model.compile(optimizer=Adam(lr=1e-5),\n",
    "              loss='categorical_crossentropy',\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model_1\"\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_2 (InputLayer)            [(None, 256, 256, 3) 0                                            \n",
      "__________________________________________________________________________________________________\n",
      "conv1_pad (ZeroPadding2D)       (None, 262, 262, 3)  0           input_2[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv1_conv (Conv2D)             (None, 128, 128, 64) 9472        conv1_pad[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "pool1_pad (ZeroPadding2D)       (None, 130, 130, 64) 0           conv1_conv[0][0]                 \n",
      "__________________________________________________________________________________________________\n",
      "pool1_pool (MaxPooling2D)       (None, 64, 64, 64)   0           pool1_pad[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_preact_bn (BatchNo (None, 64, 64, 64)   256         pool1_pool[0][0]                 \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_preact_relu (Activ (None, 64, 64, 64)   0           conv2_block1_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_1_conv (Conv2D)    (None, 64, 64, 64)   4096        conv2_block1_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_1_bn (BatchNormali (None, 64, 64, 64)   256         conv2_block1_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_1_relu (Activation (None, 64, 64, 64)   0           conv2_block1_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_2_pad (ZeroPadding (None, 66, 66, 64)   0           conv2_block1_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_2_conv (Conv2D)    (None, 64, 64, 64)   36864       conv2_block1_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_2_bn (BatchNormali (None, 64, 64, 64)   256         conv2_block1_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_2_relu (Activation (None, 64, 64, 64)   0           conv2_block1_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_0_conv (Conv2D)    (None, 64, 64, 256)  16640       conv2_block1_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_3_conv (Conv2D)    (None, 64, 64, 256)  16640       conv2_block1_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block1_out (Add)          (None, 64, 64, 256)  0           conv2_block1_0_conv[0][0]        \n",
      "                                                                 conv2_block1_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_preact_bn (BatchNo (None, 64, 64, 256)  1024        conv2_block1_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_preact_relu (Activ (None, 64, 64, 256)  0           conv2_block2_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_1_conv (Conv2D)    (None, 64, 64, 64)   16384       conv2_block2_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_1_bn (BatchNormali (None, 64, 64, 64)   256         conv2_block2_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_1_relu (Activation (None, 64, 64, 64)   0           conv2_block2_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_2_pad (ZeroPadding (None, 66, 66, 64)   0           conv2_block2_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_2_conv (Conv2D)    (None, 64, 64, 64)   36864       conv2_block2_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_2_bn (BatchNormali (None, 64, 64, 64)   256         conv2_block2_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_2_relu (Activation (None, 64, 64, 64)   0           conv2_block2_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_3_conv (Conv2D)    (None, 64, 64, 256)  16640       conv2_block2_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block2_out (Add)          (None, 64, 64, 256)  0           conv2_block1_out[0][0]           \n",
      "                                                                 conv2_block2_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_preact_bn (BatchNo (None, 64, 64, 256)  1024        conv2_block2_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_preact_relu (Activ (None, 64, 64, 256)  0           conv2_block3_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_1_conv (Conv2D)    (None, 64, 64, 64)   16384       conv2_block3_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_1_bn (BatchNormali (None, 64, 64, 64)   256         conv2_block3_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_1_relu (Activation (None, 64, 64, 64)   0           conv2_block3_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_2_pad (ZeroPadding (None, 66, 66, 64)   0           conv2_block3_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_2_conv (Conv2D)    (None, 32, 32, 64)   36864       conv2_block3_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_2_bn (BatchNormali (None, 32, 32, 64)   256         conv2_block3_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_2_relu (Activation (None, 32, 32, 64)   0           conv2_block3_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "max_pooling2d_3 (MaxPooling2D)  (None, 32, 32, 256)  0           conv2_block2_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_3_conv (Conv2D)    (None, 32, 32, 256)  16640       conv2_block3_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv2_block3_out (Add)          (None, 32, 32, 256)  0           max_pooling2d_3[0][0]            \n",
      "                                                                 conv2_block3_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_preact_bn (BatchNo (None, 32, 32, 256)  1024        conv2_block3_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_preact_relu (Activ (None, 32, 32, 256)  0           conv3_block1_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_1_conv (Conv2D)    (None, 32, 32, 128)  32768       conv3_block1_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_1_bn (BatchNormali (None, 32, 32, 128)  512         conv3_block1_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_1_relu (Activation (None, 32, 32, 128)  0           conv3_block1_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_2_pad (ZeroPadding (None, 34, 34, 128)  0           conv3_block1_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_2_conv (Conv2D)    (None, 32, 32, 128)  147456      conv3_block1_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_2_bn (BatchNormali (None, 32, 32, 128)  512         conv3_block1_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_2_relu (Activation (None, 32, 32, 128)  0           conv3_block1_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_0_conv (Conv2D)    (None, 32, 32, 512)  131584      conv3_block1_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_3_conv (Conv2D)    (None, 32, 32, 512)  66048       conv3_block1_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block1_out (Add)          (None, 32, 32, 512)  0           conv3_block1_0_conv[0][0]        \n",
      "                                                                 conv3_block1_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_preact_bn (BatchNo (None, 32, 32, 512)  2048        conv3_block1_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_preact_relu (Activ (None, 32, 32, 512)  0           conv3_block2_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_1_conv (Conv2D)    (None, 32, 32, 128)  65536       conv3_block2_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_1_bn (BatchNormali (None, 32, 32, 128)  512         conv3_block2_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_1_relu (Activation (None, 32, 32, 128)  0           conv3_block2_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_2_pad (ZeroPadding (None, 34, 34, 128)  0           conv3_block2_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_2_conv (Conv2D)    (None, 32, 32, 128)  147456      conv3_block2_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_2_bn (BatchNormali (None, 32, 32, 128)  512         conv3_block2_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_2_relu (Activation (None, 32, 32, 128)  0           conv3_block2_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_3_conv (Conv2D)    (None, 32, 32, 512)  66048       conv3_block2_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block2_out (Add)          (None, 32, 32, 512)  0           conv3_block1_out[0][0]           \n",
      "                                                                 conv3_block2_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_preact_bn (BatchNo (None, 32, 32, 512)  2048        conv3_block2_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_preact_relu (Activ (None, 32, 32, 512)  0           conv3_block3_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_1_conv (Conv2D)    (None, 32, 32, 128)  65536       conv3_block3_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_1_bn (BatchNormali (None, 32, 32, 128)  512         conv3_block3_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_1_relu (Activation (None, 32, 32, 128)  0           conv3_block3_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_2_pad (ZeroPadding (None, 34, 34, 128)  0           conv3_block3_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_2_conv (Conv2D)    (None, 32, 32, 128)  147456      conv3_block3_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_2_bn (BatchNormali (None, 32, 32, 128)  512         conv3_block3_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_2_relu (Activation (None, 32, 32, 128)  0           conv3_block3_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_3_conv (Conv2D)    (None, 32, 32, 512)  66048       conv3_block3_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block3_out (Add)          (None, 32, 32, 512)  0           conv3_block2_out[0][0]           \n",
      "                                                                 conv3_block3_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_preact_bn (BatchNo (None, 32, 32, 512)  2048        conv3_block3_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_preact_relu (Activ (None, 32, 32, 512)  0           conv3_block4_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_1_conv (Conv2D)    (None, 32, 32, 128)  65536       conv3_block4_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_1_bn (BatchNormali (None, 32, 32, 128)  512         conv3_block4_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_1_relu (Activation (None, 32, 32, 128)  0           conv3_block4_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_2_pad (ZeroPadding (None, 34, 34, 128)  0           conv3_block4_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_2_conv (Conv2D)    (None, 16, 16, 128)  147456      conv3_block4_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_2_bn (BatchNormali (None, 16, 16, 128)  512         conv3_block4_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_2_relu (Activation (None, 16, 16, 128)  0           conv3_block4_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "max_pooling2d_4 (MaxPooling2D)  (None, 16, 16, 512)  0           conv3_block3_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_3_conv (Conv2D)    (None, 16, 16, 512)  66048       conv3_block4_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv3_block4_out (Add)          (None, 16, 16, 512)  0           max_pooling2d_4[0][0]            \n",
      "                                                                 conv3_block4_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_preact_bn (BatchNo (None, 16, 16, 512)  2048        conv3_block4_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_preact_relu (Activ (None, 16, 16, 512)  0           conv4_block1_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_1_conv (Conv2D)    (None, 16, 16, 256)  131072      conv4_block1_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_1_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block1_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_1_relu (Activation (None, 16, 16, 256)  0           conv4_block1_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_2_pad (ZeroPadding (None, 18, 18, 256)  0           conv4_block1_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_2_conv (Conv2D)    (None, 16, 16, 256)  589824      conv4_block1_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_2_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block1_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_2_relu (Activation (None, 16, 16, 256)  0           conv4_block1_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_0_conv (Conv2D)    (None, 16, 16, 1024) 525312      conv4_block1_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_3_conv (Conv2D)    (None, 16, 16, 1024) 263168      conv4_block1_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block1_out (Add)          (None, 16, 16, 1024) 0           conv4_block1_0_conv[0][0]        \n",
      "                                                                 conv4_block1_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_preact_bn (BatchNo (None, 16, 16, 1024) 4096        conv4_block1_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_preact_relu (Activ (None, 16, 16, 1024) 0           conv4_block2_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_1_conv (Conv2D)    (None, 16, 16, 256)  262144      conv4_block2_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_1_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block2_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_1_relu (Activation (None, 16, 16, 256)  0           conv4_block2_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_2_pad (ZeroPadding (None, 18, 18, 256)  0           conv4_block2_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_2_conv (Conv2D)    (None, 16, 16, 256)  589824      conv4_block2_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_2_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block2_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_2_relu (Activation (None, 16, 16, 256)  0           conv4_block2_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_3_conv (Conv2D)    (None, 16, 16, 1024) 263168      conv4_block2_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block2_out (Add)          (None, 16, 16, 1024) 0           conv4_block1_out[0][0]           \n",
      "                                                                 conv4_block2_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_preact_bn (BatchNo (None, 16, 16, 1024) 4096        conv4_block2_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_preact_relu (Activ (None, 16, 16, 1024) 0           conv4_block3_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_1_conv (Conv2D)    (None, 16, 16, 256)  262144      conv4_block3_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_1_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block3_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_1_relu (Activation (None, 16, 16, 256)  0           conv4_block3_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_2_pad (ZeroPadding (None, 18, 18, 256)  0           conv4_block3_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_2_conv (Conv2D)    (None, 16, 16, 256)  589824      conv4_block3_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_2_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block3_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_2_relu (Activation (None, 16, 16, 256)  0           conv4_block3_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_3_conv (Conv2D)    (None, 16, 16, 1024) 263168      conv4_block3_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block3_out (Add)          (None, 16, 16, 1024) 0           conv4_block2_out[0][0]           \n",
      "                                                                 conv4_block3_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_preact_bn (BatchNo (None, 16, 16, 1024) 4096        conv4_block3_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_preact_relu (Activ (None, 16, 16, 1024) 0           conv4_block4_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_1_conv (Conv2D)    (None, 16, 16, 256)  262144      conv4_block4_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_1_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block4_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_1_relu (Activation (None, 16, 16, 256)  0           conv4_block4_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_2_pad (ZeroPadding (None, 18, 18, 256)  0           conv4_block4_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_2_conv (Conv2D)    (None, 16, 16, 256)  589824      conv4_block4_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_2_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block4_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_2_relu (Activation (None, 16, 16, 256)  0           conv4_block4_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_3_conv (Conv2D)    (None, 16, 16, 1024) 263168      conv4_block4_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block4_out (Add)          (None, 16, 16, 1024) 0           conv4_block3_out[0][0]           \n",
      "                                                                 conv4_block4_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_preact_bn (BatchNo (None, 16, 16, 1024) 4096        conv4_block4_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_preact_relu (Activ (None, 16, 16, 1024) 0           conv4_block5_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_1_conv (Conv2D)    (None, 16, 16, 256)  262144      conv4_block5_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_1_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block5_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_1_relu (Activation (None, 16, 16, 256)  0           conv4_block5_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_2_pad (ZeroPadding (None, 18, 18, 256)  0           conv4_block5_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_2_conv (Conv2D)    (None, 16, 16, 256)  589824      conv4_block5_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_2_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block5_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_2_relu (Activation (None, 16, 16, 256)  0           conv4_block5_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_3_conv (Conv2D)    (None, 16, 16, 1024) 263168      conv4_block5_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block5_out (Add)          (None, 16, 16, 1024) 0           conv4_block4_out[0][0]           \n",
      "                                                                 conv4_block5_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_preact_bn (BatchNo (None, 16, 16, 1024) 4096        conv4_block5_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_preact_relu (Activ (None, 16, 16, 1024) 0           conv4_block6_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_1_conv (Conv2D)    (None, 16, 16, 256)  262144      conv4_block6_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_1_bn (BatchNormali (None, 16, 16, 256)  1024        conv4_block6_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_1_relu (Activation (None, 16, 16, 256)  0           conv4_block6_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_2_pad (ZeroPadding (None, 18, 18, 256)  0           conv4_block6_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_2_conv (Conv2D)    (None, 8, 8, 256)    589824      conv4_block6_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_2_bn (BatchNormali (None, 8, 8, 256)    1024        conv4_block6_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_2_relu (Activation (None, 8, 8, 256)    0           conv4_block6_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "max_pooling2d_5 (MaxPooling2D)  (None, 8, 8, 1024)   0           conv4_block5_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_3_conv (Conv2D)    (None, 8, 8, 1024)   263168      conv4_block6_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv4_block6_out (Add)          (None, 8, 8, 1024)   0           max_pooling2d_5[0][0]            \n",
      "                                                                 conv4_block6_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_preact_bn (BatchNo (None, 8, 8, 1024)   4096        conv4_block6_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_preact_relu (Activ (None, 8, 8, 1024)   0           conv5_block1_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_1_conv (Conv2D)    (None, 8, 8, 512)    524288      conv5_block1_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_1_bn (BatchNormali (None, 8, 8, 512)    2048        conv5_block1_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_1_relu (Activation (None, 8, 8, 512)    0           conv5_block1_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_2_pad (ZeroPadding (None, 10, 10, 512)  0           conv5_block1_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_2_conv (Conv2D)    (None, 8, 8, 512)    2359296     conv5_block1_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_2_bn (BatchNormali (None, 8, 8, 512)    2048        conv5_block1_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_2_relu (Activation (None, 8, 8, 512)    0           conv5_block1_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_0_conv (Conv2D)    (None, 8, 8, 2048)   2099200     conv5_block1_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_3_conv (Conv2D)    (None, 8, 8, 2048)   1050624     conv5_block1_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block1_out (Add)          (None, 8, 8, 2048)   0           conv5_block1_0_conv[0][0]        \n",
      "                                                                 conv5_block1_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_preact_bn (BatchNo (None, 8, 8, 2048)   8192        conv5_block1_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_preact_relu (Activ (None, 8, 8, 2048)   0           conv5_block2_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_1_conv (Conv2D)    (None, 8, 8, 512)    1048576     conv5_block2_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_1_bn (BatchNormali (None, 8, 8, 512)    2048        conv5_block2_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_1_relu (Activation (None, 8, 8, 512)    0           conv5_block2_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_2_pad (ZeroPadding (None, 10, 10, 512)  0           conv5_block2_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_2_conv (Conv2D)    (None, 8, 8, 512)    2359296     conv5_block2_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_2_bn (BatchNormali (None, 8, 8, 512)    2048        conv5_block2_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_2_relu (Activation (None, 8, 8, 512)    0           conv5_block2_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_3_conv (Conv2D)    (None, 8, 8, 2048)   1050624     conv5_block2_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block2_out (Add)          (None, 8, 8, 2048)   0           conv5_block1_out[0][0]           \n",
      "                                                                 conv5_block2_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_preact_bn (BatchNo (None, 8, 8, 2048)   8192        conv5_block2_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_preact_relu (Activ (None, 8, 8, 2048)   0           conv5_block3_preact_bn[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_1_conv (Conv2D)    (None, 8, 8, 512)    1048576     conv5_block3_preact_relu[0][0]   \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_1_bn (BatchNormali (None, 8, 8, 512)    2048        conv5_block3_1_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_1_relu (Activation (None, 8, 8, 512)    0           conv5_block3_1_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_2_pad (ZeroPadding (None, 10, 10, 512)  0           conv5_block3_1_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_2_conv (Conv2D)    (None, 8, 8, 512)    2359296     conv5_block3_2_pad[0][0]         \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_2_bn (BatchNormali (None, 8, 8, 512)    2048        conv5_block3_2_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_2_relu (Activation (None, 8, 8, 512)    0           conv5_block3_2_bn[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_3_conv (Conv2D)    (None, 8, 8, 2048)   1050624     conv5_block3_2_relu[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "conv5_block3_out (Add)          (None, 8, 8, 2048)   0           conv5_block2_out[0][0]           \n",
      "                                                                 conv5_block3_3_conv[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "post_bn (BatchNormalization)    (None, 8, 8, 2048)   8192        conv5_block3_out[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "post_relu (Activation)          (None, 8, 8, 2048)   0           post_bn[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "flatten_1 (Flatten)             (None, 131072)       0           post_relu[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "dropout_1 (Dropout)             (None, 131072)       0           flatten_1[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "softmax (Dense)                 (None, 9)            1179657     dropout_1[0][0]                  \n",
      "==================================================================================================\n",
      "Total params: 24,744,457\n",
      "Trainable params: 24,699,017\n",
      "Non-trainable params: 45,440\n",
      "__________________________________________________________________________________________________\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "print(model.summary())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# load saved weights\n",
    "# if load_weights:\n",
    "model.load_weights(WEIGHTS_FINAL)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "771/771 [==============================] - 248s 321ms/step - loss: 2.7971 - accuracy: 0.2770 - val_loss: 1.7666 - val_accuracy: 0.3882\n",
      "Epoch 2/20\n",
      "771/771 [==============================] - 241s 312ms/step - loss: 1.8548 - accuracy: 0.3598 - val_loss: 1.5456 - val_accuracy: 0.4588\n",
      "Epoch 3/20\n",
      "771/771 [==============================] - 241s 312ms/step - loss: 1.6410 - accuracy: 0.4242 - val_loss: 1.4051 - val_accuracy: 0.5029\n",
      "Epoch 4/20\n",
      "771/771 [==============================] - 239s 310ms/step - loss: 1.4996 - accuracy: 0.4613 - val_loss: 1.2605 - val_accuracy: 0.5691\n",
      "Epoch 5/20\n",
      "771/771 [==============================] - 238s 309ms/step - loss: 1.3946 - accuracy: 0.5024 - val_loss: 1.2092 - val_accuracy: 0.5824\n",
      "Epoch 6/20\n",
      "771/771 [==============================] - 240s 312ms/step - loss: 1.3436 - accuracy: 0.5145 - val_loss: 1.1614 - val_accuracy: 0.5794\n",
      "Epoch 7/20\n",
      "771/771 [==============================] - 238s 308ms/step - loss: 1.2882 - accuracy: 0.5341 - val_loss: 1.1164 - val_accuracy: 0.5971\n",
      "Epoch 8/20\n",
      "771/771 [==============================] - 240s 311ms/step - loss: 1.2379 - accuracy: 0.5520 - val_loss: 1.1099 - val_accuracy: 0.5897\n",
      "Epoch 9/20\n",
      "771/771 [==============================] - 238s 309ms/step - loss: 1.1761 - accuracy: 0.5747 - val_loss: 1.0773 - val_accuracy: 0.6103\n",
      "Epoch 10/20\n",
      "771/771 [==============================] - 237s 308ms/step - loss: 1.1563 - accuracy: 0.5752 - val_loss: 1.0614 - val_accuracy: 0.6059\n",
      "Epoch 11/20\n",
      "771/771 [==============================] - 237s 308ms/step - loss: 1.1329 - accuracy: 0.5841 - val_loss: 1.0322 - val_accuracy: 0.6265\n",
      "Epoch 12/20\n",
      "771/771 [==============================] - 237s 308ms/step - loss: 1.1017 - accuracy: 0.5962 - val_loss: 0.9710 - val_accuracy: 0.6324\n",
      "Epoch 13/20\n",
      "771/771 [==============================] - 245s 318ms/step - loss: 1.0776 - accuracy: 0.6039 - val_loss: 1.0062 - val_accuracy: 0.6353\n",
      "Epoch 14/20\n",
      "771/771 [==============================] - 243s 316ms/step - loss: 1.0646 - accuracy: 0.6058 - val_loss: 0.9521 - val_accuracy: 0.6338\n",
      "Epoch 15/20\n",
      "771/771 [==============================] - 240s 312ms/step - loss: 1.0324 - accuracy: 0.6206 - val_loss: 0.9655 - val_accuracy: 0.6426\n",
      "Epoch 16/20\n",
      "771/771 [==============================] - 236s 306ms/step - loss: 1.0170 - accuracy: 0.6210 - val_loss: 1.0198 - val_accuracy: 0.6221\n",
      "Epoch 17/20\n",
      "771/771 [==============================] - 240s 311ms/step - loss: 0.9933 - accuracy: 0.6241 - val_loss: 0.9820 - val_accuracy: 0.6412\n",
      "Epoch 18/20\n",
      "771/771 [==============================] - 240s 311ms/step - loss: 0.9843 - accuracy: 0.6394 - val_loss: 0.9454 - val_accuracy: 0.6485\n",
      "Epoch 19/20\n",
      "771/771 [==============================] - 239s 310ms/step - loss: 0.9539 - accuracy: 0.6460 - val_loss: 0.9502 - val_accuracy: 0.6559\n",
      "Epoch 20/20\n",
      "771/771 [==============================] - 241s 313ms/step - loss: 0.9283 - accuracy: 0.6567 - val_loss: 0.9666 - val_accuracy: 0.6368\n"
     ]
    }
   ],
   "source": [
    "# train the model\n",
    "hist = model.fit_generator(train_batches,\n",
    "                    steps_per_epoch = train_batches.samples // BATCH_SIZE,\n",
    "                    validation_data = valid_batches,\n",
    "                    validation_steps = valid_batches.samples // BATCH_SIZE,\n",
    "                    epochs = NUM_EPOCHS)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# save trained weights\n",
    "model.save(WEIGHTS_FINAL)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEaCAYAAADg2nttAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdeVzVdfb48dfn3gv3AheQy2VflMUNHTTDXDNTXCpTJ62mxUZtsyyncpys33yzcolSypqxrCxnqpmmcrJpGcuhMvctJEtKIXFHkVXZvdz374+rN0mQ/QJyno8HD+79bO9zL8u57/WjKaUUQgghxEXoWjsAIYQQbZ8kCyGEEHWSZCGEEKJOkiyEEELUSZKFEEKIOkmyEEIIUSdJFpegn376CU3T2LlzZ4POCw4OZsmSJS0UVcsoLi5G0zQ++ugj5zar1crSpUsvet7kyZOZOHFik8v/9NNP0TSNwsLCJl9LiLZMkkUr0DTtol9dunRp0vW7du1KdnY2ffv2bdB533//Pffff3+Tyr6YV155hUGDBjFmzBiGDRtW4zElJSX4+PiwYMGCRpeTnp7OPffc0+jza1JeXo6maaxatara9lGjRpGdnY2vr2+zlleT5kpw7cHkyZOdfw9ubm4EBARw1VVXsXTpUsrLyxt0rdp+dq7Q2A9ubZGhtQPoiLKzs52PN2/ezKRJk0hNTSUkJAQAvV5f43mVlZW4u7vXeX29Xk9wcHCD4woICGjwOQ2xevVqbrjhBqKjo5k8eTI//fQTPXr0qHbMv/71L8rKypg+fXqjywkMDGxqqPVmNBob9V6Luo0dO5aVK1dit9vJzc3lm2++YdGiRbz55pusW7cOi8XS2iF2KFKzaAXBwcHOr3O/8AEBAc5t5/5pBwcH89RTT3HPPfdgsVgYNWoUAEuWLCE+Ph4vLy9CQ0O5/fbbycnJcV7/159mzj3/8MMPueaaa/D09CQ2NpZ//vOfF8R1fjNUcHAwCxcuZObMmXTq1Ing4GAeffRR7Ha785iSkhKmT5+Oj48PFouFWbNmMXv2bHr37l3t2gUFBaxbt47f/va3jB8/nuDgYFasWHHBe/P6668zbtw4QkNDAVi5ciUJCQn4+PgQEBDAhAkTyMrKuuj7++tmqJycHG644QY8PT0JCQlh4cKFF5zzySefMHToUPz8/PDz82PkyJGkpaU594eHhwNw4403omkaZrMZqLkZav369QwePBiTyYS/vz9Tp06loKDAuf+Pf/wjffv25b333iM2Nhaz2cyoUaM4ePDgRV9XXQoKCpg2bRpWqxWTycTAgQP55ptvnPuVUjzxxBN06dIFo9FIYGAg1157rfPnmZWVxfjx4/H398fDw4OuXbvy17/+9aJltuRrPZeIQ0NDiY+P58EHH2Tz5s3s37+fefPmOY9r7M/uxIkT/O53vyMiIgIPDw969uzJsmXLqsWwa9cuRowYga+vL2azmV69evHBBx849xcWFnLfffcREhKCl5cX/fv357///S/gaCLt2bMnAP3790fTtAv+LtoTSRZtXHJyMl26dGHbtm28+uqrgKMZa+nSpfzwww988MEH7Nu3jylTptR5rUcffZS7776b3bt3M3HiRKZOncqBAwfqLD86OpodO3bw/PPPs2TJEt59913n/ocffpgvvviCf/3rX2zevBk3N7cak8Cnn35Kjx49iI2Nxc3NjWnTpvH3v/+dyspK5zHff/8927Ztq9aEVFlZyfz580lLS2PNmjWUlZUxYcIEqqqq6ny959x222389NNPfP7556xdu5bU1FTWrl1b7ZjS0lIeeeQRtm/fzvr16wkJCeGaa67h9OnTgOOfBjiSWXZ2Nvv376+xrIMHDzJmzBh69uzJt99+y6pVq9iyZQu33nprteN+/vln3nnnHVatWsX69evJzs5mxowZ9X5NNbn11lvZuHEj7733HqmpqcTHxzN27Fjnz/jtt99m2bJlLF++nIyMDD7//HNGjBjhPP/OO+/Ebrfz9ddf8+OPP/LKK69ctNbUGq81KiqKG2+8sdo/7Mb+7MrKykhISODjjz8mPT2dOXPmMHv27GrXnjRpElFRUWzbto3vvvuOZ599Fh8fHwCqqqoYM2YM+/fv58MPP2T37t3ccccdTJgwga1bt+Ll5cWGDRsA+Pzzz8nOzq6WvNsdJVrV119/rQB1+PDhC/YFBQWpa6+9ts5rbN68WQEqNzdXKaXUjz/+qAC1Y8eOas+XLVvmPKeiokK5u7urv/3tb9XKW7x4cbXnN954Y7Wyhg8frqZOnaqUUio/P18ZDAb1zjvvVDumT58+qlevXtW2/fa3v1VPPPGE8/n+/fuVpmnqvffec26bNWuW6ty5s6qqqqr1tR46dEgBKi0tTSml1OnTpxWgVq9e7TzG399fvfDCC0oppXbt2qUAtXnzZuf+4uJiZbFY1IQJE2otp7KyUplMJvXRRx8ppZQqKytTgPrggw+qHffJJ58oQBUUFCillHrooYdUbGysstlszmM2btyoAPXtt98qpZSaPXu2MplMqrCw0HnMihUrlLu7u7Lb7bXGNGnSpFpjTktLU4D65ptvnNuqqqpU9+7d1YMPPqiUUurpp59Wffr0qRbb+aKjo6v9/OvSWq918eLFClAlJSU17q/vz64m06dPVxMnTlRKKWWz2ZSbm1ut533yySfK29tblZaWVtt+4403qttuu00pdeHfYnsmNYs27oorrrhgW0pKCqNGjSIiIgJvb28SExMB6qzan9/h7e7ujtVq5cSJE/U+ByA0NNR5zr59+7DZbAwcOLDaMYMGDar2vLS0lC+++ILf/va3zm1RUVGMGjWK119/HXB0Qr799tvcdddd6HS//Fru2LGD8ePH06VLF7y9vZ3V+vo22aSnp2MwGKq9j15eXlx22WXVjtu3bx+33HILMTEx+Pj44OfnR0VFRYObhvbs2cOQIUOq9TsNGjQId3d39uzZU+31n98pHhoaSmVlZbUmnIaWq9frGTx4sHObTqdj6NChznJvvfVWcnNz6dKlC3feeSfvvvsupaWlzuMfeeQRHnvsMQYPHszjjz/Oli1b2uRrVWfXPtU0DWj8z85ms/H0008THx+Pv78/ZrOZt99+23meXq/nkUce4ZZbbmHkyJHMnz+f77//3nn+jh07KCkpISAgALPZ7Pz66KOPyMjIaNRra8skWbRxXl5e1Z5nZmYybtw4unfvznvvvcfOnTud1ebzm3Rq8uvOcU3TqvU/NPacc3+0tfniiy8ICgq6IPHcc889fPnll+zfv59///vfnD59ulrHdkFBAaNHj8ZsNvPWW2+xY8cO1q9fD9T9WhtCKcWYMWPIy8vj1VdfZevWraSlpWE2m5u1nPPV9L4Cdf48miImJoaMjAyWL19Op06d+POf/0xcXJwz+c+cOZP9+/czbdo0Dhw4wIgRI5rcNAbN/1r37NlDcHAwHh4eTfrZzZ8/nxdffJE5c+bw5ZdfkpaWxq233lrtvKSkJNLT05k4cSLffvstl19+Oc8884wz/pCQENLS0qp9paent8rIq5YmyaKd2bZtG2fOnGHp0qUMHjyY7t27c/z48VaJpVu3bhgMhgs+gW7durXa8w8//LBareKc8ePHExQUxIoVK1ixYkW1jm2A3bt3U1hYyLPPPsuwYcPo0aMHubm5DYoxLi4Om83G9u3bndtKS0urdYAeOnSIAwcO8H//938kJiYSFxeH3W53tnkDGAwGNE2rs6+kV69ebNq0qdpxW7ZsobKyskU7N3v16kVVVRWbN292brPb7WzcuLFauR4eHlx33XUkJyeze/dusrOznR2yABEREdx9993885//5C9/+QsrVqzAZrPVWqarX2tWVharVq3ixhtvBJr2s1u/fj0TJ05kypQp9O3bl9jY2BprBF27duXBBx/ko48+4k9/+hPLly8HICEhgezsbHQ6HbGxsdW+IiIigF8SZUP62NoqGTrbznTr1g273c4LL7zA5MmTSU1NdX7ScTU/Pz+mTZvGo48+isViITo6mhUrVpCVleX8Yzlz5gyffvopn3766QXnn+vofuWVVygsLKz2TwsgOjoag8HAiy++yP33309GRgZz585tUIx9+/ZlxIgR3H333c5P1E899VS1T4/BwcH4+PiwfPlyQkJCOH78OHPmzMFoNDqPMRgMRERE8OWXXzJs2DDc3d3x9/e/oLyHHnqI5cuXc8899zB79mxycnKYMWMGY8eOvaDpqzGKioqqJToAT09P+vTpwzXXXMNdd93F8uXLCQ4OZunSpRw8eJBHHnkEgJdffhkPDw8SEhLw9vbmv//9L2fOnHE27d17771MmjSJ2NhYSkpK+M9//kPXrl0xGGr+N9HSr7WiooLjx49fMHQ2Ojqap556Cmjaz6579+589tlnbNy4EavVyuuvv84PP/zg/N09efIkCxcuZOLEiXTp0oXc3FxSUlKIi4sDYNy4cQwcOJDrr7+eZ599ll69epGXl8eGDRuwWq1MmTKF0NBQjEYjX3zxhXMUWqdOnZr83rSKVu4z6fDq6uCuqcPx+eefV2FhYcpkMqmrrrrK2cm6ZcsWpVTtHdy/7mQLCwtTzzzzTK3l1VT+bbfdpsaMGeN8XlxcrKZOnarMZrPy8/NTs2bNUvfdd59KSEhQSim1du1aFRQUVGun9bmO7to6tt9++20VFRWljEajSkhIUOvWravWWVlXB7dSSmVnZ6sJEyYok8mkAgMD1VNPPXVBB+rnn3+u4uLilNFoVHFxcerTTz+94PWv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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEaCAYAAADg2nttAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdd3yT1f7A8c+TpOleaTqhrDIrAkpli4wKiFyG4NbLUPgpXkGuVxTFiwvlivs6EcSBV3tR4QqIYkGWZZRR9iqlrIaWNi3dbZLn/P4IRGKBho50cN6vV1/0eXKe53yThnxznnOecxQhhECSJEmSrkBT1wFIkiRJ9Z9MFpIkSVKlZLKQJEmSKiWThSRJklQpmSwkSZKkSslkIUmSJFVKJot65uDBgyiKwrZt267quIiICN54441aiqp2FBYWoigKS5cudewzGo288847VzxuzJgxjBw5str1L1++HEVRyMvLq/a5JKmxk8niKimKcsWfFi1aVOv8bdq0wWQy0aVLl6s6bs+ePUyePLladV/JRx99RM+ePRk8eDB9+/a9ZJmioiICAgJ45ZVXqlzP/v37mTRpUpWPv5TS0lIUReG7775z2n/rrbdiMpkIDAys0fquJDU1FZ1OR0xMDPIWp9oVFxfn+H+p1+uJjIxk0KBBLFiwAJvNdlXnquqXuJrw888/oygK2dnZbq/7YjJZXCWTyeT4+f777wHYsWOHY19ycvIljysvL3fp/FqtloiICHQ63VXFFRoaio+Pz1UdczWWLFnCHXfcwaRJk9iwYQMHDx6sUObbb7+lpKSECRMmVLmesLCwWn0eF/P09CQiIgJFUdxSH8C8efO47777sNlsJCYmuq3eK3H1vdkQTZw4EZPJxLFjx1i2bBn9+vVj2rRpDBo0iLKysroOr2ERUpX99ttvAhAnT56s8Fh4eLh44YUXxMSJE0VwcLDo27evEEKIuXPniuuvv174+PiIyMhIcf/994vMzEzHcQcOHBCASE5Odtr+/vvvxZAhQ4S3t7eIiYkRX3/9dYX65s6d67T9yiuviMmTJ4vAwEARHh4upk+fLmw2m6NMYWGhGD9+vPD39xfBwcHi8ccfF3//+9/Fdddd53Rus9ksPDw8xJEjR0R5ebmIiIgQTz75ZIXn3L17dzFy5EjH9meffSa6du0q/P39hdFoFMOHDxdpaWmOxwsKCgQglixZ4tgXEhIi3n77bcd2ZmamGDVqlPD29hYRERHilVdeEaNHjxYjRoxwlPnxxx9F7969RVBQkAgKChIDBgwQO3fudDon4Pjx9fUVQgixbNkyAYjc3FxH2XXr1omePXsKT09PYTAYxNixY4XZbHY8/uSTT4rOnTuLb7/9VsTExAhfX18RHx8v0tPTK7wef1ZWViZCQ0PFmjVrxMyZM8WYMWMqlCktLRXPPvusaNGihdDr9aJp06Zi+vTpjsfz8vLE5MmTRVRUlNDr9aJVq1birbfeEkIIsWfPHgE4PXchnN8bF17zjz/+WIwePVr4+fmJCRMmCCGEmDZtmmjbtq3w8vISzZo1E1OmTBGFhYVO50pKShIDBw4Uvr6+ws/PT/To0UOkpKQ46t61a5dT+RUrVggPDw+n9/ifff/996JTp05Cr9eL8PBwMXXqVFFSUuJ4/MLf+9133xVNmzYVAQEBYvTo0SInJ+eKr3fXrl3F1KlTK+zfvHmzUBRFvPHGG459V3qvXnjNLv658H/k4MGDYvjw4SI8PFz4+PiIzp07i//+979O9SUmJopu3boJX19f4e/vL2644Qaxbt06x+OnTp0S9913nzAYDMLf31/07dtXbNq0SQjxx9/04p/bb7/9is+7tsiWRS168803adGiBVu2bOGTTz4B7Jex3nnnHfbu3cvixYs5fPgwDz74YKXnevrpp5k4cSK7d+9m5MiRjBs3jvT09Errb9WqFcnJybz11lu88cYbfPPNN47Hp02bxi+//MK3335LUlISHh4ezJ8/v8J5li9fTvv27WndujUeHh6MHz+eL774wukb6Z49e9iyZYvTJaTy8nJefvllUlJSWLlyJSUlJYwYMeKqLgHcf//9HDx4kJ9//plVq1axY8cOVq1a5VSmuLiYv//972zdupX169cTGRnJbbfdRkFBAQA7d+4E4NNPP8VkMpGWlnbJuo4fP87gwYPp0KED27dv57vvvmPTpk3cd999TuWOHj3KokWL+O6771i/fj0mk4lHHnmk0ueyZMkSfH196devH2PHjuXHH38kMzPTqcx9993HwoULmTNnDvv37ychIYGmTZsCYLPZGDRoEKtXr2bevHkcOHCA+fPnExQU5NqLeZHnn3+eQYMGsWvXLmbMmAFAQEAAn332GQcOHGDevHksW7aM6dOnO47Ztm0b/fr1Izo6mnXr1rF9+3YmT56M1WqlY8eO9OrVi08//dSpnk8//ZQRI0YQFhZ2yTg2b97MmDFjuP3229m9ezfz5s0jISGBadOmOZVbu3YtKSkp/PzzzyxbtoxNmzbx3HPPXfXzBujevTu33HILixcvduy70nvV19eXDRs2APZLQiaTiXXr1gFQUFDA0KFD+fXXX9m1axf3338/99xzD1u3bgVwnCc+Pp6UlBS2bdvGs88+i16vdxx/8803A5CYmMj27du5+eabGThwIOnp6bRv357//Oc/AOzbtw+TycSiRYuq9LyrrU5SVCNRWcti6NChlZ4jKSlJACI7O1sIcfmWxQcffOA4pqysTOj1evH555871ffnlsWdd97pVFe/fv3EuHHjhBD21oJOpxOLFi1yKtO5c+cKLYtRo0aJf/7zn47ttLQ0oSiKSEhIcOybMmWKaN68uVPL5c9OnDghAJGSkiKEqLxlsXPnTgGIpKQkx+OFhYXCYDA4tSz+rLy8XHh5eYmlS5cKIYQoKSkRgFi8eLFTuT+3LJ544gnRunVrYbVaHWU2btwoALF9+3YhhL1l4eXlJfLy8hxl5s+fL/R6vVBV9bIxCSHEgAEDnF7H3r17i9dee82xnZKSIgCxcuXKSx6/dOlSoSiK2Ldv3yUfv5qWxZQpU64YqxBCfPnllyIoKMixPXLkSNGjR4/Llv/iiy9EUFCQKC4uFkIIYTKZhE6nE6tWrbrsMSNHjhT9+/d32rdo0SKh1WpFVlaWEMLesoiOjhYWi8VRZubMmaJ169ZXjP9yLQshhHjsscdEaGjoZY/983v1z/8vr2TAgAHiiSeecDrP5Y7797//Ldq0aVPh/81NN90knnvuOSGEECtXrhSAOHv2bKV11ybZsqhF3bp1q7AvMTGRW2+9lejoaPz9/YmPjwfs32qv5OIOb71ej9ForPCt9ErHAERFRTmOOXz4MFarlR49ejiV6dmzp9N2cXExv/zyC6NGjXLsa9myJbfeeqvjW2RpaSlfffUVDz/8MBrNH2+p5ORkhg8fTosWLfD396dDhw4uPdcL9u/fj06nc3odfX19ueGGG5zKHT58mHvvvZeYmBgCAgIIDg6mrKzM5Xou2LdvH71790ar1Tr29ezZE71ez759+5ye/8Wd4lFRUZSXl5Obm3vZc6emprJ27VrGjh3r2Dd27Fg+/fRTR0f39u3b0Wq1DBw48JLn2L59O02bNiU2NvaqntelXOq9+c0339C7d28iIyPx8/Nj0qRJ5OXlkZ+f76j/1ltvvew577rrLqeBBJ9//jnR0dGO9/il7Nu3r8KAiVtuuQWbzebUL9axY0enfryL38tVIYRw6quq6ns1Pz+fJ598ktjYWIKDg/Hz82P9+vWO46Kjo7nnnnu4+eabuf3225k7dy5Hjx51qjctLY2AgAD8/PwcPzt27ODIkSNVfn61QSaLWuTr6+u0nZqayrBhw2jXrh0JCQls27bN0RSurJPxQrP1AkVRUFW12sdU1rn7yy+/EB4eXiHxTJo0idWrV5OWlsb3339PQUGBU8d2bm4ugwYNws/Pjy+//JLk5GTWr18P1GyHqhCCwYMHk5OTwyeffMLmzZtJSUnBz8+v1jpuL/W6Alf8e8ybNw9VVWnbti06nQ6dTsejjz5KWlpajXV0X0jU4k+jrCwWS4Wyf35vrlmzhgceeIAhQ4bw448/snPnTt566y3A9b+Xl5eXUwJcsGABDz/8cI0MIKjK+/9K9u3bR6tWrYDqvVcff/xxlixZwssvv8y6detISUmhX79+Tsd98803bNq0iX79+rFq1So6dOjguJSkqipdu3YlJSXF6efgwYO8++67VX5+tUEmCzfasmULFouFd955h169etGuXTvOnDlTJ7Fc+NDatGmT0/7Nmzc7bf/www9OrYoLhg8fTnh4OPPnz2f+/PkMGzaMqKgox+O7d+8mLy+Pf/3rX/Tt25f27dtf9dC/2NhYrFar4/ov2Fs6KSkpju0TJ06Qnp7O888/T3x8PLGxsaiq6uivANDpdCiKUmlfyXXXXcfvv//uVG7Tpk2Ul5fTsWPHq4r9YuXl5Xz++ee88sorFT4URowYwbx58wDo2rUrNpuN1atXX/I8Xbt25dSpUxw4cOCSj1/oF8jIyHDsO378OGazudIYN2zYQIsWLXj++ee56aabaNOmDSdPnqxQ/6+//nrF80yaNImNGzfy8ccfk56ezvjx469Y/rrrrnN8MF+wbt06tFot7du3rzTuqti8eTPr16/nzjvvBFx7r15IVn9+D61fv57x48czevRoOnXqRPPmzS/ZIujSpQtPPfUUv/76K3fddZejVR4XF8fhw4cxGo20bt3a6SciIuKKdbubTBZu1LZtW1RV5e233+bYsWN8//33vPbaa3USS3BwMOPHj+fpp59m5cqVHDp0iKeeeopjx445vglaLBaWL1/OHXfcUeH4Cx3dH330EWvXrq1wb0SrVq3Q6XS8++67pKWl8csvv/D0009fVYxdunRhwIABTJw4kY0bN7J3717Gjh3r9K0tIiKCgIAAPv74Y1JTU9m4cSNjx47F09PTUUan0xEdHc3q1asxmUzk5ORcsr4nnniCU6dOMWnSJPbv38/atWt56KGHGDJkSIVLX1djyZIlmM1m/u///o+OHTs6/fz1r3/lf//7H5mZmXTu3JkRI0YwYcIEEhISSEtLY8uWLXzwwQcADBs2jBtvvJFRo0axYsUKjh07xvr16/niiy8A+w2NnTt35tVXX2Xv3r1s3bqVCRMmOL0Wl9OuXTuOHz/O119/TVpaGvPnz2fhwoVOZWbMmMH27dsZP348O3bsIDU1lW+++YYdO3Y4ynTo0IGbb76ZJ554gmHDhhEZGXnFep9++mnWrl3Lc889x6FDh1i2bBn/+Mc/mDhxIqGhoVf7UldQXFzMmTNnOH36NNu3b+fVV19l8ODB9O/fn8ceewxw7b0aFRWFp6cnv/zyC5mZmY4bOdu1a8f333/Pjh072Lt3L+PGjXO6HLlnzx5mzpxJUlISJ06cYMOGDWzevNlxKXHChAkYjUaGDRvGmjVrSE9PZ/Pmzbz88sv8/PPPAI57t1asWMHZs2cdlwXdrk57TBq4yjq4L+5wvuCtt94STZo0EV5eXuKWW25xdLJeGCp3uQ7uP3eQNWnSxKlz9FId3H+u//777xeDBw92bBcWFopx48YJPz8/ERwcLKZMmSIeffRRERcXJ4QQYtWqVSI8PPyyndYXOrov17H91VdfiZYtWwpPT08RFxcn1q5d69TR7MrQWZPJJEaMGCG8vLxEWFiYePHFFysMnf35559FbGys8PT0FLGxsWL58uUVnv+SJUtEmzZthIeHxxWHzq5du9YxdDY4OPiyQ2cvVlkH5IABA0R8fPwlHyspKRH+/v6Ov2VJSYmYPn26aNq0qfDw8BDR0dHimWeecZQ3m81i0qRJIiwsTOj1ehETEyPeeecdx+N79uwRPXv2FN7e3qJ9+/ZixYoVl+zgvvg1F0IIVVXFk08+KYxGo/D19RUjRowQCxcurPC8NmzYIG655Rbh7e0t/Pz8RK9evSoMl120aJEAxE8//XTJ5/xnF4bOenh4XHHo7MU++ugjx9/xcrp27eoYbnrh3LfeequYP3++0yAGISp/rwohxMcffyyio6OFVqt1DAJJTU0V/fv3F97e3iIqKkq8+uqr4u6773YMb01PTxfDhw93DHVu0qSJmDx5stOQ5DNnzoiHHnpIRERECA8PD9G0aVMxZswYsXfvXkeZWbNmiYiICKEoSp0NnVWEkLeRSn/o1asXLVu25Ouvv+bRRx9FVVXHsF9JcsXrr7/OBx98wLFjx5wGPEgN29XdJiw1Kjt37mTfvn10796d0tJSPvvsMzZt2sTs2bMBuP766+nTp08dRyk1FAUFBaSnp/P222/z1FNPyUTRyMiWxTVs586d/N///Z9jiGKHDh2YNWsWQ4cOrePIpIZozJgxLF++nKFDh/Ltt99WGMEkNWwyWUiSJEmVku1ESZIkqVIyWUiSJEmVarQd3BffmHS1jEZjnc8dfyUyvuqR8VWPjK966nN8F99Y+2eyZSFJkiRVSiYLSZIkqVIyWUiSJEmVkslCkiRJqpRMFpIkSVKlZLKQJEmSKiWThSRJklSpRnufhSRJUkNjUwUapfIVLC9FlBQjdm4CqwVN3yE1HptMFpIkSXWkzKpyKLuE/Vkl7DtbzKGzJQR765gUF07XJn6VHi/Ky2DPNtSt62H3NrBaoFU7aMjJIiUlhYULF6KqKgMHDmTkyJEVyiQlJbF48WIURaF58+ZMnToVgLvvvptmzZoB9rsfr3bFNUmSpPqgoMzGwbQcNqdmsf9sMak5pdgEKECLYE8GtApkd2YxL609Re9m/jwcF47B2/ljWlitcGAXYut6RMpmKC2BgCCUvoNRuvW1J4ta4JZkoaoqCxYsYObMmYSEhDBjxgzi4uJo2rSpo4zJZGLp0qW8/PLL+Pn5ce7cOcdjer2euXPnuiNUSZKkGpNTbGFfVgn7s4rZn1XC8XNlAOg00NrgzYgOBq4L86F9qDd+ei0AFpvKD/vNLN6bw05TEQ90DmVwTADatAP2BLE9CQrzwdsXpWtve4Jodz2KVlurz8UtySI1NZWIiAjCw8MB+2psycnJTsli9erVDB48GD8/e9MrMDDQHaFJkiTVCCEEGQUW9mUV25PD2RIyCy0AeOkU2hu96dPcSM82kYTpyvDUXXp8kYdWw93XG+nTzJ+PN6Qzb1sma9an8Mj+BFqVZ6N07o7S7Wa4riuKh4fbnp9bkoXZbCYkJMSxHRISwpEjR5zKXJj47/nnn0dVVe688066dOkCgMVi4ZlnnkGr1TJixAi6detWoY7ExEQSExMBmDNnDkajscrx6nS6ah1f22R81SPjqx4Zn51NFaRmF7Hr9Dl2ZeSz63Q+uSX25BDkraNTVCB33RBA5yYBtAn1Q6dRHPFZrdbLntd6Kp3SDYk02ZjIrIwTbIi4kc/bjmR63FTGXB/OxD4x+OhrtxVxKfWmg1tVVUwmE7NmzcJsNjNr1izeeOMNfH19+fDDDzEYDGRmZvLSSy/RrFkzIiIinI6Pj48nPj7esV2dWR3r86yQIOOrLhlf9Vyr8ZXbVI7klDouKR04W0KJVQUgzFdH53AfYsNCiA3zpmmA/qIRTWXkmcsuGZ+wWuF0OiLtMBw7ZP838zQoCrTtiObBx+jXtRc36Xz4MuUs/92TxeqjZibFhdMj2r/Gn+OVZp11S7IwGAzk5OQ4tnNycjAYDBXKtGnTBp1OR1hYGJGRkZhMJlq3bu0oGx4eTmxsLOnp6RWShSRJDV9+qRVPneayl2jcqdhi4+DZEkefw+GcUqyqfWHRZoF6bmkZQGyoN7FhPoT6Vn45SAgB5mxKD+1G3ZWMOHYYjh8FS7m9QEAQtGyL0m8ISlwflKA/rsb4AZO7RzCgVSAfbj3Da+tP062pH5Piwl2quya4JVnExMRgMpnIysrCYDCQlJTElClTnMp069aNjRs30r9/f/Lz8zGZTISHh1NYWIinpyceHh7k5+dz6NAhRowY4Y6wJUmqZTZVcDi7hO0ZRWzPKCQttwyDt47HukcQ58LQ0Zq2P6uY308UsD+rmPS8MlQBWgVaGbwY1i6Y2FBvOoT5EOBZ+WUgUVoM6amIY4cdLQfO5XIOQOcBzWNQbrkNWrVFadkWQsIqvb+ifag3b93Wgh8Pmvl2dzZ/W57GvZ2M/KWdAa3m6u/NuBpuSRZarZYJEyYwe/ZsVFWlf//+REdHk5CQQExMDHFxcXTu3Jldu3Yxbdo0NBoNDzzwAP7+/hw6dIh58+ah0WhQVZWRI0c6dYxLktSw5JVY2WGyJ4cUUxGF5SoaBdobvbm3k5Gk4wW8vPYUA1oF8lDXMMcooVqNqdTKwu1ZrE3PR6+1d0bf1TGE2DAf2hm98XKhpSNUFXZtRezZhkg7BBknQdgvUxEWhdKhM7RqR/AN3cjzC0LRVa1FoNMo3BEbQu9m/sxLzmThjrOsPZbPo90iaGf0rtI5XaEIIUStnb0OyZXy6o6Mr3oaW3w2VXAkp5TtGYVszyjiqLkUgGAvLTdE+dE1ypcuEb74ef4xdPTbPTn8sD+HYC8df+sRwY1RrrcyriY+VQgSj57ji51ZlFpV7ogNYcx1IVd1GUyoKuxIQl2eAKePg4+fo7WgtGwHLdug+AVUKb5K6xaCzScL+XRbJuYSK0PaBPFAl9AqJ9g677OQJKn+KrOq5JZYyS21kldiQ0XgrdPgrdPg5aHB6/zv3h4a9FrXLnXklVrZmfFH66HgfOuhndGb+zsb6RrlR8tgTzSXuOziodXwYJdQekT78e4mEy/+dor4mEAm3BiGbw22Mo7nlfHR1jMcOFtCxzBvHukWQXSgp8vHC9WG2PY7YnkCmE5CRFOUh59EuakPisY9o5UURaFnM386R/rwn13ZrDicy/6sEt65vcUlX9vqkMlCkhohVQgKymznk8D5fx0Jweq0v9iiunxeBfDWp+KpVfDWKXifTyYX/5w4V0ZqTikCCPTSEtfEj65RfnSJ9MXfhWv9F7QJ8ebt21o4Whk7TUU83iOSGyJ9r/4FuUiZVeXbPdn874AZH72WKT3sHceuzsckVBsieSNixX/tSSIyGmXiP1DierstSfyZj4eWh+PC6dcykNwSa40nCpDJQpIaNItN5cS5co7llpJmLuVYbhmZhRbySq3YLnGB2UunEOytI9hLR4sgT7pE+mLw0hHkrcXgrSPIS4dGgVKroNSqUmJVKbGolFpVSi32bcXDE3N+kX2fVaXEKsgrtVFqtVBqUTH6enBvJ3vroZXh0q0HV11oZXRvam9lvLDmJLfGBDKhaxg+Hlf/wbztdCGfJGeSVWRhYKtAxt0QSoCXax+DwmZDJK+3J4kzpyGqGcqk6Shde6Fo6n70FkDrEK9aO7dMFpLUQBRbbBzLLSPNXEpabhnHcks5ea6M80P98dJpaBnsSedIX4K9tPakcOHHy/6vt0f1P9Tqok+lrdGbt4e24Jvd2Sw9YHa0Mrq42MrIKbYwf3sWSScKaBqg59X4ZlwX7uPSscJmQ2xZZ08SWRnQpDmaR56GG3rWmyThDjJZSFI9lFdiJS23lDRzmf3f3FJMBRbH44FeWloFe3FjpC+tDF60CvYiwt+jVi4/1Bd6rYaxN4TRI9qf9zaZmLXmJINbBzHuxtDLtjJsqmDlkVwWpWRjE4L7OxsZ1SEEDxf6XoTVitiy1p4kzp6B6JZoHp0BXbpfU0niApksJKmeyCux8kVKFrsy08gpKnfsD/fzoFWwJwNaBtLK4EXLYE8M3roqrXnQGLQz2u81+GZ3Nv87aGZHRiF/u0Qr46i5lA+3nCHVXEqXSF8euSmcSH99pecXViti0xrET4shOxOaxaB57Fno3P2afc1BJgtJqhc2Hs/n4+RMSiwqA9saaeKj0MrgSctgL7fcZ9DQeOo0jLvR3sp493wrY0ibIMbeEEpRuZX52zJZcTiXAE8tT/aO4ubm/hU+6IVqg/xzcM4MeWbEOTOYsxGb10JOFjRvjeaeSdAp7ppOEhfIZCFJdSiv1MonyZkknSigTYgXU3pGcmNMk3p9n0V90j7Um3eGtuA/u+2jm3ZkFCI4TnZROYMjFB4IzsX3xFHEbjPiXC4iz54YOJcL+Xl/3DR3gaJAy7Zo7n8EOnaVSeIiMllIUh35/Xxrotii8mCXUEZ1qP0pG+ozkZuDWP0j4sxpsNlAtf3xr6r+aZ8KNivYbOhUlb+qNrp5RfJBi2HobeU8eeh72hactJ8X7EnALwCCDBAUgtKslf33QANKUDAEhti3/QNRdPJj8VLkqyJJbnbufGvi9xMFtDZ4MbVnJM2CXL8ZrLERWSbEz98jktbYv+k3aQ5aHWi1oNGARgseevu/5/cpjt+1oLWX6aDV8m9lPz4hRkra3Y5yPhkQaLCvJCeTQLXIV0+S3CjpRD4fb82kyGLjgc5G7ogNuWZbE+L0CcTKxYitG0CrRbl5EMrgUSjG8Gqd199opExexqtxMllIkhvkl1r5ZFsmG48XEGPw4uWezWh+jbYmRPoR1BWLIWUzeHqh3DrC/hNkqPxgqc7IZCFJtWzTyQI+2nqGonIb93cycsd1IY5V064VQgg4vA/1p8Wwfyf4+KIMuwdl4DCnSfak+ksmC0m6yJGcEkosKlEBegzeumrd5JZfZuPT5EzWH8+nVbAnLw2IpkVw7U3HUB8JIWDvDtSf/gupB+wdyKPHotxyG4q3a3dQS/WDTBaSBBSV21iwPYvVaecc+/RahUg/PZEBHkT564n01xPpb/89uJJEsvl8a6KgzMZ9nYyMvsZaE0JVYecme0viRBoYjCj3TkLpcyuK/tq8/NbQyWQhXfN2ZBTy/pYz5JZYGXNdCJ0ifMjIL8dUUI6p0MKpc+VsO13kWFITzicSfz1R/h7nk4g9kQR76/jvnhzWpefTMtiTFwZE0/Iaak0IqxWxdT1i5Xdw5pR90Z9xU1C631LlxX6k+kEmC+maVVRu47MdWSQePUfTAD3PDGpO2/MrjXWOcJ46wqYKsostmAosmArKySiwJ5OT58pJPl3omMwP7Mtw3nu9kTEdG2ZrQljKobgIigvP/1uEKC6EEvvvBUJFzTlr339+n6NsSZH9PoimLVAmPX7+Xi4AACAASURBVHV+RlZ5B3pj4LZkkZKSwsKFC1FVlYEDBzJy5MgKZZKSkli8eDGKotC8eXOmTp0KwNq1a/nhhx8AuOOOO+jXr5+7wpYaqZ2mIv692URuiZU7Yg3c28mIXnv5yeG0GoVwPz3hfvoKcxBdSCQZBRYyC8tpb/RuMH0TQlUh4wTi8F7Eob1wZB8UnLviMcV6PXj72n98fMHPHyUs0v67tw9K61i4Xk6R0di4JVmoqsqCBQuYOXMmISEhzJgxg7i4OKe1tE0mE0uXLuXll1/Gz8+Pc+fsb9jCwkK+++475syZA8AzzzxDXFwcfn7uX8xdaviKLTb+tfoIP+7NpGmAnqcHNa/2usUXJxKo3sI8tU2oKpw+jji0B3H4fHIoLLA/aAhF6XgjhDcBXz/w8UPxuZAU/OzJwMeX0MgoOR3JNcgtySI1NZWIiAjCw+032/Tq1Yvk5GSnZLF69WoGDx7sSAKBgYGAvUXSqVMnx/5OnTqRkpJCnz593BG61IikmIp4f7OJnBIrozoYuK/zlVsTjYFQbXAqHXForz05HN5nv2QEYAxH6dQN2nVEadux2jfDSY2bW5KF2WwmJCTEsR0SEsKRI0ecymRkZADw/PPPo6oqd955J126dKlwrMFgwGw2V6gjMTGRxMREAObMmYPRaKxyvDqdrlrH17bGGp9VFWw4moNOq9A5KoAAr5rpEC0qt/LBhnT+t/cM0UHezBtxPR3C6m8LoDp/X2GzYj12hPJ9Oynfl4JlX4q9vwHQRjTBo1d/9Nd1QX/dDWhDI9wenzvI+GpHvengVlUVk8nErFmzMJvNzJo1izfeeMPl4+Pj44mPj3dsV6eZXBcrgV2NxhjfrjNFLNiexfG8Mse+5oGexIZ5ExvmQ2yYN0afq08eu87YWxNni6yM7GDgvk5GmoT5NrrXT5w5jdi4yj6/0oU+h/Am9g7mdtejtO0IwSFYAAtQBFDF16Axvv/cqT7HFxUVddnH3JIsDAYDOTk5ju2cnBwMBkOFMm3atEGn0xEWFkZkZCQmkwmDwcD+/fsd5cxmM7Gxse4IW3IDU0E5C3dkseVUIWG+HkzvE0WQl459Z4vZn1XC2mP5rDySB0CYrwexYd5cdz55NPHXX7YTtcSi8sXOLFYeySPK34PXBjWjQ2jjuglMWMoR25MQG1bB4b32Sfc6dUOJ621PEHL6DKkGuSVZxMTEYDKZyMrKwmAwkJSUxJQpU5zKdOvWjY0bN9K/f3/y8/MxmUyEh4cTERHBN998Q2GhvSm9a9cu7rvvPneELdWionIbi/fmsOyQGZ1Gw4OdQxneIdjRh3BhfWSbKjiWW8b+s8XszypmZ0YRa4/lA/alRWNDz7c8Qn1oGeyJVqOw+0wR/958hrNFFoa3D+aBzqF46hpP34Q4fQKx4RfEpt/s/Q+hESijHkTpNVAmCKnWuCVZaLVaJkyYwOzZs1FVlf79+xMdHU1CQgIxMTHExcXRuXNndu3axbRp09BoNDzwwAP4+/sDMHr0aGbMmAHAmDFj5EioBsymClannWPRrrPkl9oY0CqQB7qEYvC+9FtRq1FoHeJF6xAvhrc3IITgdEE5+7NK2J9VzL6sEjadtH+R8NZpaBbkyaHsEiL9PXj11mbEhjWO1oQoK0Vs22hvRRw9CFodyo09UW4eBO2uvybXhJbcSxFCiMqLNTwXOsyroj5fU4SGG9/ezGLmb8/kWG4ZHUK9ebhrOK1Dqn8/QnaxxZE8DueU0jHMm/uv0JpoSK+fOHEUsWEVYss6KCmGiCb2qbx7DkDxD6zz+OojGV/V1XmfhXRtO1NQzuc7s9h0spBQHx3/6B1Fn0usiVxVRh8P+rbwoG+LxjF7qVpchLruZ3sr4ngqeOhRuva2tyLaxMqb3aQ6IZOFVGuKLTa+25vD/w7molXgvk5GRnYwNKr+g5oiigthfwpidzLZOzcjSkugSXOUeyah9OiH4isvvUp1SyYLCbD3JWw+VUBi6jlsQhDspSPY+4+fIC8tBm8dQd46fD00V/x2qwpB4tE8FqWcJbfURr+WAfy1SyghVRj62lgJIezTbOzZhtizzT59t6qCjx9efeIpv6kvtGwrWxFSvSGTxTUuv9TKqqPn+OlwLjnFVsJ8PQj21rL/bDG5JTYsasUuLb1WIciRTLROicVTq7Di15McyiqindGLGbc0rfZ0Go2FKC2Bg7sRe7Yj9m4D8/nr1tEtUYaMRrm+K7RsR2B4eL29pi1du2SyuEYdyy1l+aFc1qfnU24TdIrw4ZGbwuka5edYE1oIQVG5Sm6pldwS+09eqQ1ziZW8EivmUisZ+eXsyyymoPyPaVdD/fRM6xXJLS0CrvlvxiIz44/Ww+G9YLWCpzfEdravFNexK0pwSOUnkqQ6JpPFNcSmCraeKmT5ITN7s0rQaxX6twxkWLtgml1iPWhFUfDz1OLnqSU68MoL1lhsKnmlNs6V2ujSKpLCc7m19TTqHSGE/RKSzQpWC6QdRuzdbk8QWSZ7ocholAHDUDp2tXdSy7UdpAZGJotrQEGZjV9T8/jpcC5ni62E+eoYd0Mot8YE4edZM2sNeGg1hPpqCPX1wMtDS2GNnNW9RJ4Z8e2niKyMPz78bbbzv9tAPf9jU8//e2GfWvFkHnpo3wklfri99VDFeZgkqb6QyaIRS88tZcXhXNYes19quj7ch4fjwrmpyR+XmiQ7sXc76mfvQFkJdOgCWq190R6NFrSa8//qLvr9/GNOj9u3laho+41ycvlQqRGRyaKRsamC5NOFLD+Uy57MYvRahX4tA7i9bXCDWZDHnYTVili6CPHLD9CkOZpJs1GimtV1WJJU78hk0YiUWVWm/3Kc9LwyjD46/tollFtbBxFQQ5eaGhuRnYk6by4cO4zSdzDK3Q/L1oAkXYZMFo3ImrRzpOeV8Vj3CAa2CpSXmq5AbE9C/eLfgECZNB3NTXIxLUm6EpksGgmbKlh6wEzbEC9ujQm85oesXo6wlJP/yVzUn5dAizZoJj0lO58lyQUyWTQSSScKOFNoYdyNYTJRXIYwnUKd9zolp9JRBo1CGfWAHMIqSS6SyaIREELww/4cmgTo6d5UziF0KWrSasTXH4Pek6CZb1DQvG1dhyRJDYpMFo3ArjPFpOWW8bfuEWhkq8KJKC1GfP0JYvNv0O56NA/9Hc827SiQ02lI0lWRyaIR+H5/DgZvHf1aNo4pumuKOJGG+snrcPYMyl/uRRl2l/3eCUmSrppMFg1cak4pu88UM/aGUDy0cupvsF+WE7+tQCz+DPwC0Dz5Ckq7jnUdliQ1aG5LFikpKSxcuBBVVRk4cCAjR450enzt2rV89dVXGAz2NYSHDBnCwIEDAbj77rtp1sx+o5TRaOTpp592V9j13g/7c/D10DCkTVBdh1IviKJC1C/eg52b4fo4NOOfQPGXLS5Jqi63JAtVVVmwYAEzZ84kJCSEGTNmEBcXR9OmTZ3K9erVi4ceeqjC8Xq9nrlz57oj1AbFVFDOppMFjOpgwMfj2r68IoRAbF2P+O5zKDiHcucElFtHyJFhklRD3JIsUlNTiYiIIDw8HLAnheTk5ArJQro6S/ab0SoKf2lvqOtQ6pQ4nor67af2BYSatUIz+VmUlm3qOixJalTckizMZjMhIX/M2R8SEsKRI0cqlNuyZQsHDhwgMjKSsWPHYjQaAbBYLDzzzDNotVpGjBhBt27dKhybmJhIYmIiAHPmzHEcWxU6na5ax9c2nU6H4h3Ab8cOMTQ2nDbR9eumMne9frY8M4Vff0Lp6uUo/oH4TX4G7wG3o2iv3MpqCH9fGV/VyfhqR73p4O7atSu9e/fGw8ODX3/9lQ8++IBZs2YB8OGHH2IwGMjMzOSll16iWbNmREQ4f0DGx8cTHx/v2K7OSmNGo7Fer1RmNBr5ctNRLDbBkJY+9S7W2n79hNWCWLMcsTwBysvsl5tuv5tiH1+KcytfR6Mh/H1lfFUn46u6qKioyz7mlmRhMBjIyclxbOfk5Dg6si/w9/d3/D5w4EAWLVrkdDxAeHg4sbGxpKenV0gW15KiMisrD+fSs5k/UQH6ug7HrcSebagJCyDztL0D+64JKBHycqYk1Ta3jLWMiYnBZDKRlZWF1WolKSmJuLg4pzK5F30j3LZtm6M/o7CwEIvFAkB+fj6HDh265vs6lu49Q5FF5Y7Ya6evQphOYXv3RdT3XgJAM+WfaKf8UyYKSXITt7QstFotEyZMYPbs2aiqSv/+/YmOjiYhIYGYmBji4uJYuXIl27ZtQ6vV4ufnx+TJkwE4ffo08+bNQ6PRoKoqI0eOvKaThcWmkrAzg07hPrQJ8a7rcGqdKC5ELE9ArFkOek/7KKcBt8s5nSTJzRQhhKjrIGpDRkZGlY+tz9cUf03N4/0tZ3hxQDRdIn3rOpxLqonXT6g2xMZExNJFUJiP0udWlJH3owQE14v4apOMr3pkfFVX530WUs1QhWDJATNtQ33pHOFT1+HUGnF4H2rCp3AiDVrHopn6AkrzmLoOS5KuaTJZNCBbThVyOr+cF29r2ShvNhPnchH/XYDYuh6CjSgT/4Fy082N8rlKUkMjk0UDIYTgh305RPh50K+1kTxzTuUHNRBCCMTGXxHfLbQPhR12N8qQ0Siecs1wSaovZLJoIPZllXA4p5RHbgpH14iWSxWZGahffQCH9kDb69A8+Jgc4SRJ9ZBMFg3ED/tzCPTSMqBVYF2HUiOE1YpYtQSx7Fvw0KM8OBmlzyAUjZw5V5LqI5ksGoD03FK2ZxRxf2cjnrqG/2Eqjh1G/fJ9OJUON/ZCc+8klKBr554RSWqIZLJoAH7Yb8ZLp2Fom+oPG61LorQEsXQRYs0KCAyyT/h3Q4+6DkuSJBfIZFHPZRaWs+F4Pn9pF4yfZ8Odhlzs2Ya66CMwn0XpdxvKqL+i+NTP+0QkSapIJot67n8Hc9EoMLxDw7xMI/LzEAnz7cNhI6PRPD0HpXVsXYclSdJVksmiHssvtfJrah59WwRi9GlY01sIIRBJa+xLm5aW2NfAvm0MikfDeh6SJNnJZFGPrTicS7lNNLgJA62mU6j/ng0HdkFMezR//RtKVLO6DkuSpGqQyaKeKrWqrDiUS7emfkQHetZ1OC4RhfmIdT+T89Ni0GhQ7n8Epe8QORxWkhoBl5LFTz/9RJ8+fQgIkAvfu8uvqXkUlNf/aciFEHBoD2L9L4idm8BqxbN7Xyyjx6MEh1R+AkmSGgSXksXevXv55ptvuO666+jbty833XQTHvLac62xqoL/HTATG+pNh9D6OWGgyM9F/L4GsXEVZJnAxxfl5sEofQcR1OWmejurpiRJVeNSspg+fToFBQX8/vvvrFixgk8//ZTu3bvTt29fYmPlyJaatiE9n7PFVv7vpvq1GqBQbbA/BXXDKti1FWw2aBOLMuwelK69UPQN43KZJElXz+U+C39/f4YMGcKQIUM4fvw477//Pr/99htGo5GBAwcydOhQvLzkxG/VJYRgyX4zzQL1dG1SP+5DEOZsRFIiYmMi5GSBXwDKwL/Yp+eIlPM4SdK14Ko6uPfs2cOGDRtITk4mJiaGv/3tbxiNRn766SdeffVVXnrppdqK85qxPaOI4+fKmNozEk0dTs0tbDbYs83eitizHYQKHTqjjB6H0qW7HAIrSdcYl5LFl19+SVJSEj4+PvTt25c333wTg+GPjtc2bdowfvz4K54jJSWFhQsXoqoqAwcOZOTIkU6Pr127lq+++spx3iFDhjBw4EDHYz/88AMAd9xxB/369XP5CTYkQgi+35eD0UdH3xZ1M5hA5JxFbPgF8Xsi5JkhMBhlyB32lerCIuskJkmS6p5LycJisfCPf/yD1q1bX/okOh1z5sy57PGqqrJgwQJmzpxJSEgIM2bMIC4ursJa2r169eKhhx5y2ldYWMh3333nOP8zzzxDXFwcfn5+roTeoKxLz2f/2RImxdXNNOTi9AnU1/4B5WXQsSua+x6B6+NQdHKEtSRd61z6FBg1ahR6vd5pX2FhIeXl5Y6WQJMmTS57fGpqKhEREYSHhwP2pJCcnFwhWVxKSkoKnTp1ciSHTp06kZKSQp8+fVwJvcE4W2RhXnImHUK9GdImyO31i7JS1E/+BXpPNP98ByXs8mvxSpJ07XEpWcydO5dHH33U6du82Wzm448/5tVXX630eLPZTEjIH2PuQ0JCOHLkSIVyW7Zs4cCBA0RGRjJ27FiMRmOFYw0GA2azucKxiYmJJCYmAjBnzhyMRqMrT+2SdDpdtY6/WqoQvLBuLyoKL91+HeGBVx4oUBvxnXvvFUrPnCJo1jt4xnaq1rnc/fpdLRlf9cj4qqe+x3c5LiWLjIwMmjVznq6hWbNmnD59usYC6dq1K71798bDw4Nff/2VDz74gFmzZrl8fHx8PPHx8Y7t6ozzNxqNbr1PYOmBHHaeOsfjPSLQWwrJzi68Yvmajk/9fTXit59Qht1DQZOWFFTz3O5+/a6WjK96ZHzVU5/ji4q6/BUFl+ZhCAgI4MyZM077zpw5g7+/v0sBGAwGcnL+WDM6JyfHqYMc7ENzL9zoN3DgQNLS0i55rNlsrnBsQ5aeW8pXKdl0b+rHwDpYBU+cPoH4z0fQ7nqUv9zt9volSWoYXEoW/fv3580332T79u2cOnWKbdu28eabbzJgwACXKomJicFkMpGVlYXVaiUpKYm4uDinMrm5uY7ft23b5ujP6NKlC7t27aKwsJDCwkJ27dpFly5dXH1+9Vq5TeWtJBN+eg2PdY9AcfNQWUc/hac3moefRNE03PUyJEmqXS5dhho5ciQ6nY6vvvqKnJwcQkJCGDBgAMOGDXOpEq1Wy4QJE5g9ezaqqtK/f3+io6NJSEggJiaGuLg4Vq5cybZt29Bqtfj5+TF58mQA/Pz8GD16NDNmzABgzJgxjWYk1Ne7sjmeV8bz/ZoS6OX+EUfi64/hzCk0T7wolzWVJOmKFCGEqOsgakNGRkaVj3XHNcU9mUU8n3iSwW2CeLTb1U3rURPxqb+vRnz+Lsqwe9CMuK9a5/qz+nxNFmR81SXjq576HN+V+ixc/jprtVrJyMggPz/faX/Hjh2rHtk1qqjcxjtJJiL9PRh/Y5jb65f9FJIkXS2XksXBgwd56623sFgslJSU4O3tTWlpKSEhIbz//vu1HWOjMy85E3OJlX8Nao6Xzr1rPTj6Kbx80Ez8h+ynkCTJJS59Un3xxRcMHz6chQsX4u3tzcKFCxk9ejSDBg2q7fganY3H81mbns/dHY20NXq7vX5HP8XDT6IEBru9fkmSGiaXkkVGRgZDhw512jdy5EhWrFhRK0E1VjnFFj7aeoY2IV7c2dH9CwOpv69GbFqDMuxulA6d3V6/JEkNl0vJwsfHh5KSEgCCgoI4deoUhYWFlJaW1mpwjYkqBO9tMmGxCf7eKwqtm+d+cuqnGCb7KSRJujou9Vl0796dnTt30qdPH/r378+LL76IVqulR48etR1fo/HT4VxSzhTzaLdwogL0lR9Qg2Q/hSRJ1eVSshg3bpzj9+HDh9O2bVtKSkro3FleynDFiXNlfLHzLHFRvgxuXQeTBF7op5j2kuynkCSpSiq9DKWqKo8//jgWi8Wxr3379txwww1oNO4dydMQWWyCt3/PwEun4W89It1+l7bsp5AkqSZU+mmv0WjQaDROyUJy3bd7sknLLeOx7hEEe7v3Lm3ZTyFJUk1x6dNr6NChvP3224waNQqDweD07fjCGhVSRQeyivlhfw7xMYH0iHZt0sWaIvspJEmqSS4li88++wyA3bt3V3gsISGhZiNqJIotNt7eZCLU14OHutbBXdqyn0KSpBrkUrKQCeHqLdiexdkiC6/GN8PHw73f6h39FH+5R/ZTSJJUI2QPdS3YfLKAxKPnuCM2hA5hPm6tW/ZTSJJUG1xqWfzzn/+87CieF198sUYDauhyS6x8sOUMMQZP7rnevUsnipJi2U8hSVKtcClZ/HmRo7y8PH777TduvvnmWgmqoRJC8P5mE6VWlWm9ovDQum+YrFBtqPPfhMzT9vUpZD+FJEk1yKVk0a9fvwr7evTowYcffsiYMWNqOqYGa39WCdsyihh/YyjRgZ5urVv88BXsTka57xHZTyFJUo2rcp+FwWDg+PHjNRlLg7fskBl/vYbb2rj3W72atAbxyw8o/W5D039o5QdIkiRdJZdaFmvWrHHaLi8vZ8uWLbRt29blilJSUli4cCGqqjJw4EBGjhx5yXKbN2/mrbfe4rXXXiMmJoasrCymTZvmWMGpTZs2TJo0yeV63SWzsJwtpwq5IzYETzeuUSGOHkR89b69Q/vuiW6rV5Kka4tLyWLDhg1O256enrRr147bb7/dpUpUVWXBggXMnDmTkJAQZsyYQVxcHE2bNnUqV1JSwsqVK2nTpo3T/oiICObOnetSXXVlxaFcFOC2tu6b+0nknEX9YDYEG9E88jSKzv3reEuSdG1w6dNl1qxZ1aokNTWViIgIx93evXr1Ijk5uUKySEhIYMSIEfz444/Vqs/dii02Eo+eo1czf4w+Hm6pU5SWoL7/ClgtaB5/FcUvwC31SpJ0bXIpWaxbt44WLVrQvHlzx7709HROnDhB3759Kz3ebDYTEvLHYj8hISEcOXLEqUxaWhrZ2dnceOONFZJFVlYW06dPx9vbm3vuuYcOHTpUqCMxMZHExEQA5syZg9FY9WGrOp3uqo7/blcGRRaVB3u0wmis/Wk9tBoNHl9/RFnGcYKenYvn9TfUep1X42pfP3eT8VWPjK966nt8l+PyHdyvv/660z6j0cjrr7/uUrKojKqqfPnll0yePLnCY8HBwXz44Yf4+/uTlpbG3LlzefPNN/Hxcb7ZLT4+nvj4eMd2dnZ2leMxGo0uH68KQcL2k7QzehGuKyM7u6zK9brKa9USyjavRbnrIQqat6GgGs+1NlzN61cXZHzVI+Ornvoc34W+4UtxqSe2pKSkwoezj48PRUVFLgVgMBjIyclxbOfk5GAwGBzbpaWlnDx5khdffJHHHnuMI0eO8Prrr3P06FE8PDzw97d/W2/VqhXh4eGYTCaX6nWHHRlFZBRYGNbOUHnhGqAmb6Bo8UKU3vEo8cPdUqckSZJLLYumTZuyefNmevXq5di3devWCn0OlxMTE4PJZCIrKwuDwUBSUhJTpkxxPO7j48OCBQsc2y+88AIPPvggMTEx5Ofn4+fnh0ajITMzE5PJVK9muv3xoJkQbx29mtX+5SeRfgSx8F08OnTGdv+jbl8bQ5Kka5dLyeL+++/ntddeIykpiYiICM6cOcOePXuYMWOGS5VotVomTJjA7NmzUVWV/v37Ex0dTUJCAjExMcTFxV322P379/Pf//4XrVaLRqNh4sSJ+Pn5ufbsatmJvDJ2nSnmwc6h6Gp5TW2Rm2Mf+RQQRNDTr2K22Gq1PkmSpIspQgjhSsHs7Gw2btxIdnY2RqORPn361OtOmoyMjCof6+o1xQ+2mFh7LJ8Fo1oT4Fl78zCJ8jLU12fAmdNonvkXoV3i6u01T6jf12RBxlddMr7qqc/xXanPwqWWhcViISgoyOlGOqvVisViwcPDPUNF65v8Uitrj+XTv2Vg7SYKIRCfvwcnjqKZ/CxK0xa1VpckSdLluNTB/corr5CWlua0Ly0tjdmzZ9dKUA3BqtRzlNsEw9rV7tQe4qfFiOQNKKMeROnSvVbrkiRJuhyXksWJEycq3FXdunXra3ZuKKsq+OlwLl0ifGgWVHsTBoodmxBLF6H06IcyZHSt1SNJklQZl5KFj48P586dc9p37tw5PD3dO7NqfZF0ooCcEit/aV97w2XFiTTUBW9By7Yof/2bHPkkSVKdcilZdO/enXfffZcTJ05QVlbGiRMneP/99+nRo0dtx1cvLTtoJsrfgxujfGvl/CI/F/WDV8DXH81jz6F46GulHkmSJFe51MF9zz338OWXX/Lss89isVjQ6/X079+fe+65p7bjq3cOZZdwOKeUSXHhaGrh276wWFA/fA0K89FM/5dcxEiSpHrBpWSh1+t5+OGHeeihhygoKCA3N5d169YxdepUPvnkk9qOsV5ZdtCMr4eGAa0Ca+X8YtGHcPQgmv+bjtI8plbqkCRJulouz2mdn5/Pxo0bWbduHenp6XTo0IFx48bVYmj1T3axhd9PFDC8vQFvj5pfs0Ic2Y9IWo0y9C6UuD41fn5JkqSqumKysFqtbNu2jbVr17Jr1y4iIiLo3bu3Y0GiwMDa+XZdX/10KBeAobW0ZoX602LwD0QZemetnF+SJKmqrpgsJk6ciEaj4ZZbbuGuu+6iVatWAKxatcotwdUnZVaVVal5dG/qR7hfzXc4ixNHYe92+/0U1+goM0mS6q8rXktp3rw5RUVFpKamcvToUQoLC90VV72z9lg+BeVqrQ2XVX9aDN4+KP3kGtqSJNU/V2xZvPDCC5w9e5Z169axbNkyFi5cSKdOnSgrK8Nmu3YmshNCsOyQmVbBnsSGetf8+U2nYMcmlNvGoPjUznBcSZKk6qi0lzY0NJQxY8bw3nvv8c9//pPg4GAUReGpp55i0aJF7oixzu06U8zJc+X8pb2hVm6OEyu/Aw8PuT6FJEn1lsujoQDat29P+/btGT9+PFu3bmX9+vW1FVe98uNBM0FeWm5uXvNrVojsTMSWtSj9b0fxv7YGDEiS1HBcVbK4QK/X06dPH/r0afzDO0/nl7M9o4h7rzfioa2F4bKrloCiQRk0qsbPLUmSVFNq/tOvkVl+yIxOozCkTc0PlxXnchEbfkXpNQDFUH/XBpEkSZLJ4goKy22sSTtH3xb+BHlXqRF2ReLX/4HNhjLkjho/tyRJUk1yW7JISUlh6tSpPP744yxduvSy5TZv3sxdd93F0aNHHfuWLFnC448/ztSpU0lJSXFHuAAkHs2j1Cr4S7uaHy4rigoQa1eiKY+/WQAAG+NJREFU3NQHJezyq1NJkiTVB25JFqqqsmDBAp599lnefvttfv/9d06dOlWhXElJCStXrnRaO+PUqVMkJSXx1ltv8dxzz7FgwQJUVa31mG2qYMWhXDqGedPK4FXj5xdrVkBZCcptcp0KSZLqP7cki9TUVCIiIggPD0en09GrVy+Sk5MrlEtISGDEiBFOS7UmJyfTq1cvPDw8CAsLIyIigtTU1FqPeeupQrKKrAyrhZvwRGkJYvUy6NwNpWnLGj+/JElSTav5C/GXYDabCQkJcWyHhIRw5MgRpzJpaWlkZ2dz44038uOPPzode3FLw2AwYDabK9SRmJhIYmIiAHPmzMForHqHsU6nY+XRAiIDPBnauQVaTc3eW1H0v/9QWFRA8L0Po69CnDqdrlrPr7bJ+KpHxlc9Mr7a4ZZkURlVVfnyyy+ZPHlylc8RHx9PfHy8Yzs7O7vK58pRvdiVkc+EG8PINedU+TyXIizlqEv+A+07kR8SAVWI02g0Vuv51TYZX/XI+KpHxld1UVGX7z91S7IwGAzk5PzxoZuTk4PB8MflndLSUk6ePMmLL74IQF5eHq+//jrTp0+vcKzZbHY6tjb8NyUDL52G+Jiav0lOJK2Bc2Y0D02r8XNLkiTVFrcki5iYGEwmE1lZWRgMBpKSkpgyZYrjcR8fHxYsWODYfuGFF3jwwQeJiYlBr9fz3nvvMWzYMHJzczGZTLRu3brWYs0tsZJ46CyD2wThq9fW6LmFzYb4+Xto2Rbad6rRc0uSJNUmtyQLrVbLhAkTmD17Nqqq0r9/f6Kjo0lISCAmJoa4uLjLHhsdHU3Pnj35+9///v/t3Xt0U1Xe//F3LqV3SpOWttwEKiDCMIhhgQUHsLWypIM8yjDqQgepgAt4GHQJyuigM8hFERFHWcP4VASWs6aKdhxluMhNBopaqEXECxSQH0qhtCm9QUrTs39/dJlpaErSpjkp9Pv6q8k5J+eTs5J+c/Y+Z2+MRiOZmZkYjYHrl998rIw6TZHRt/WnM1V5e6DkHMbfPhqQMaaEECJQDEopFewQgXDmzJlmb3O5TuPRfx5nYFJH5qcktGoepWloz/8vGI0YF67C4EfBa8ttniD5/CX5/CP5Wu5qfRZyB3cD5Y46bogJZdLgrq3/4gWfQ9Hp+mHIA3hmJIQQgSD/tRqIjwxhUVoPbD1adxwopVT95EadkzAMvf4HXxRCXH+kWOjhmwI4VYhh7H0YjK3baS6EEHqQYqED7d/vQScrhuFjgh1FCCFaRIpFgKnCb+Do1xju+h8MDYYxEUKIa4kUiwDT/r0RojpiuD092FGEEKLFpFgEkPp/J+DwAQxp4zGEtv7ItUIIoRcpFgGk/v0ehEdgGHN3sKMIIYRfpFgEiDr7Iyo/F8PouzFERAU7jhBC+EWKRYCoze9DSAiGtPHBjiKEEH6TYhEAqrQY9fluDLffhaFj697gJ4QQwSDFIgDU1hzAgCF9QrCjCCFEq5Bi0cpURRlq7ycYbhuDwRIf7DhCCNEqpFi0MvXJv8DpxDD2vmBHEUKIViPFohUpx0XU7n9jsI3AkND0UL9CCHGtkWLRitSBfeC4hCH118GOIoQQrUqKRStS+3dC5y7Qu1+wowghRKvSZVpVgIKCAtauXYumaaSmpjJhgvuVQtu2bWPr1q0YjUbCwsKYMWMG3bp1o7i4mMcff9w1g1OfPn2YPn26XrF9ps6fhaNHMEyYLFOmCiGuO7oUC03TyMrK4tlnn8VqtbJgwQJsNhvdunVzrTNy5EjS0+sH2ztw4ADr1q3jmWeeASAxMZHly5frEbXF1P5dYDDIMORCiOuSLs1QhYWFJCYmkpCQgNlsJiUlhby8PLd1IiIiXH87HI5r6te5Ugr12S64aRAGq1wuK4S4/uhyZmG327Fara7HVquVY8eONVpvy5YtbNq0CafTycKFC13PFxcXM3/+fMLDw7n//vvp379/o223b9/O9u3bAVi2bBlxcXEtzms2m5u1/eVvCig7f5aOD04j3I/9+qq5+fQm+fwj+fwj+QJDtz4LX4wdO5axY8eyd+9e3n//fWbPnk1sbCyrV68mOjqaEydOsHz5clasWOF2JgKQlpZGWlqa63FJSUmLc8TFxTVre21zDoSGU9XnF1T7sV9fNTef3iSffySffyRfy/3cN+yJLs1QFouF0tJS1+PS0lIsFkuT6zdspgoJCSE6OhqA3r17k5CQQFFRUWADN4OqqUEd2Ivh1hSZs0IIcd3SpVgkJydTVFREcXExTqeT3NxcbDab2zoNC0B+fj5JSUkAVFRUoGkaAOfOnaOoqIiEhAQ9YvtEFXxWf29Fyh3BjiKEEAGjSzOUyWRi6tSpLF68GE3TGDNmDN27dyc7O5vk5GRsNhtbtmzh8OHDmEwmoqKimDVrFgDffPMN7777LiaTCaPRyLRp04iKajvzQ6jcHWDtDH0GBDuKEEIEjG59FkOGDGHIkCFuz/32t791/f3II4943G748OEMHz48oNlaStlL4NtDGMZNwmCU+xuFENcv+Q/nB/X5blAKw21yb4UQ4vomxaKFlFKo3J1wY38MnWXQQCHE9a1NXTobSEopHA4HmqZ5veHv3Llz1NTUXP31qipQo8dB734YL15szahe+ZKvtSmlXEOxXEs3TAohWke7KRYOh4OQkBDMZu9v2Ww2YzKZrrqOulQFN94E3Xpi8LJua/MlXyA4nU4cDgfh4eG671sIEVztphlK0zSfCoUvlKZBdRVEROpeKILJbDa7LmMWQrQv7aZYtGrTyaWLoNVBVHTrveY1QpqghGif2k2xaFXVFWAyQ1iE93WFEOI6IMWimVSds/7MIjJafmULIdoNKRbNVV0FSrWoCaq8vJy333672ds99NBDlJeXN3s7IYRoLe3maqiGtH+8iTp9sunlBgNKKc8LLzsAA3QIdXva0L0XxvunXXW/FRUVrF+/nilTprg973Q6r9r5vmHDhqu+rhBCBFq7LBYtpjTQFIS07LAtWbKEU6dOceeddxISEkJoaCgxMTEUFhayd+9epk6dypkzZ6ipqSEzM5PJkycDMGzYMDZv3kx1dTWTJ09m2LBh5OXlkZiYyFtvvdXkpazvvPMO77zzDpcvX6ZXr1689tprhIeHc/78eZ5++mlOnToFwNKlSxk6dCjvvfcea9asAaB///785S9/adH7FEJcfwyqyZ/Q17YzZ864Pb548WKjOTCaYjabcTqdjZ5X9vNQWQ7derXoktnTp0/zu9/9jp07d5Kbm8vDDz/Mzp076dGjBwBlZWXExsZy6dIlxo0bx8aNG7FYLG7FYsSIEWzbto2bbrqJGTNmkJ6ezn333edxf3a73TUU/Isvvkh8fDxTp07lscce49Zbb2XatGnU1dVRXV1NUVERmZmZ/Otf/8JisbiyXMmX49iWx+sHyecvyeeftpzvavNZyJmFj5RSUF0J4a13b8XgwYNdhQLgrbfeYvPmzUB9sTt58mSjeT+6d+/OwIEDcTqdDBo0iNOnTzf5+t9//z0vvfQSFRUVVFdXM2rUKAD27dvHqlWrgPoRgTt27MjGjRvJyMhw7c9ToRBCtF9SLHx16SLUte69FQ1/oefm5vKf//yHjz76iPDwcCZOnOhxSI/Q0P/2lZhMJhwOR5Ov//jjj5OVlcWAAQPIzs5m//79rZZdCNG+yNVQvqqqAJMJwlt+b0VkZCRVVVUel1VWVhITE0N4eDiFhYXk5+e3eD8/q6qqIiEhgdraWnJyclzPjxw5kvXr1wNQV1dHRUUFI0aM4OOPP8ZutwP1TWJCCPEzObPwgaqrg0vVEB2DwdDy+mqxWBg6dCh33HEHYWFhbpO2jx49mg0bNjBq1CiSk5Mbzf3REvPmzSMjIwOr1cott9ziKlR//vOfmT9/Pv/4xz8wGo0sXboUm83GnDlzmDhxIkajkYEDB/Lqq6/6nUEIcX2QDm4PruzgVpXlUFoMSd3bxDzbTXXA60E6uANP8vlH8rVcm+jgLigoYO3atWiaRmpqKhMmTHBbvm3bNrZu3eoaBnvGjBl069YNgJycHHbu3InRaOSRRx5h8ODBesWuV1VRf1/FFfdWCCFEe6FLsdA0jaysLJ599lmsVisLFizAZrO5igHUt6Onp6cDcODAAdatW8czzzzDjz/+SG5uLq+88gplZWUsWrSIVatWYdRpGlNVexlqHBAb12aH9/jDH/5AXl6e23OPPvqo27S1QgjhD12KRWFhIYmJiSQkJACQkpJCXl6eW7Fo2LThcDhc/5jz8vJISUkhJCSEzp07k5iYSGFhIX379tUjev1ZhcEAkW13hNklS5YEO4IQ4jqnS7Gw2+1YrVbXY6vVyrFjxxqtt2XLFjZt2oTT6WThwoWubfv06eNax2KxuK7YaWj79u1s374dgGXLlrl1HkP97HLNmc/CbDajlMJZXYUhPBJzWPD7Khpqrbk5mis0NLTRsb2S2Wz2uk4wST7/SD7/tPV8TWlTV0ONHTuWsWPHsnfvXt5//31mz57t87ZpaWmkpaW5Hl/ZgVRTU+Pz7HI/dyCrSxfBWYuKtQatQ9mTYHZw19TUeO2ca8sdeCD5/CX5/NOW812tg1uXhn+LxUJpaanrcWlpaaM7kxv6uZnK07YNh7AIuKoKMJogPFKf/QkhRBulS7FITk6mqKiI4uJinE4nubm52Gw2t3WKiopcf+fn55OUlASAzWYjNzeX2tpaiouLKSoq4sYbbwx4ZqXVwcVqiIzCoFNnuhBCtFW6NEOZTCamTp3K4sWL0TSNMWPG0L17d7Kzs0lOTsZms7FlyxYOHz6MyWQiKiqKWbNmAfVjId1222088cQTGI1GMjMz9bkSqrq6fpTZIHZs9+nTx2PfjhBC6K1d3pT3fwfOcbKs6TGVDAYDWo0DFBAaii8XzPaKDeNRW4IfiRtrqljITXn+kXz+kXz+acv52sRNedcSpRRoGphDfCoUvlqyZAldunRxTX60YsUKTCYTubm5lJeX43Q6mT9/PnfddZfX16quruaRRx7xuJ2neSmamsNCCCF80S6LhbczAEPFBTR7LXTrgcEc0mr7HT9+PM8995yrWHz00Ue88847ZGZmEh0djd1u59e//jXp6elebwAMDQ0lKyur0XZHjx5l1apVbvNSAPzxj39k+PDhZGVlueawEEIIX7XLYnE1Sqn6CY7Cwlu1UAAMHDiQkpISzp49S2lpKTExMXTu3Jnnn3+ezz//HIPBwNmzZzl//jydO3f2mnPZsmWNttu3b5/HeSk8zWEhhBC+kmJxpRpH/RAfMYGZ/CcjI4NNmzZRXFzM+PHj+eCDDygtLWXz5s2EhIQwbNgwj/NYXKml2wkhREvINaFXqqoAoxEiogLy8uPHj+fDDz9k06ZNZGRkUFlZSVxcHCEhIezbt48ff/zRp9dparum5qXwNIeFEEL4SopFA0rT4GIVxsjogN1b0a9fP6qrq11jZd17770cOnSI1NRUNm7c6PM9JE1t169fP9e8FGlpafzpT38C6uewyM3NJTU1lbFjx3L06NGAvD8hxPWpXV462xTldEJZCaZOFrSQDoGM5xe5dNY/ks8/ks8/bTmfXDrrI4PZDPGJGM1mtDY0FpQQQgSbFIs27ttvv2XOnDluz4WGhvLxxx8HKZEQoj1qN8XiWm1t69+/P5988onbc8FshrpWj6MQwj/tpoPbaDS2qWHGr0VOp1O3GQqFEG1LuzmzCAsLw+FwUFNT49Pd0W35noVg5FNKueZHF0K0P+2mWBgMBsLDw31aty1frQBtP58Q4vojbQpCCCG8kmIhhBDCKykWQgghvLpu7+AWQgjReuTMwoOnn3462BGuSvL5R/L5R/L5p63na4oUCyGEEF5JsRBCCOGV6fnnn38+2CHaot69ewc7wlVJPv9IPv9IPv+09XyeSAe3EEIIr6QZSgghhFdSLIQQQnjVbsaGulJBQQFr165F0zRSU1OZMGGC2/La2lpef/11Tpw4QXR0NHPnzqVz5866ZCspKeGNN97gwoULGAwG0tLSuPvuu93WOXLkCC+99JIr07Bhw5g4caIu+X42a9YswsLCMBqNmEwmli1b5rZcKcXatWv58ssvCQ0NZebMmbq11Z45c4aVK1e6HhcXFzNp0iTGjRvnek7vY7h69Wry8/OJiYlhxYoVAFRVVbFy5UrOnz9PfHw8jz/+OFFRjed/3717Nx988AFQP6Xu6NGjdcm3YcMGDh48iNlsJiEhgZkzZxIZGdloW2+fhUDle/fdd9mxYwcdO3YE4IEHHmDIkCGNtvX2fQ9UvpUrV7pm7fx5lsnly5c32laP4+c31Q7V1dWp2bNnq7Nnz6ra2lr15JNPqtOnT7uts2XLFrVmzRqllFJ79+5Vr7zyim757Ha7On78uFJKqYsXL6o5c+Y0yvf111+rpUuX6pbJk5kzZ6ry8vImlx88eFAtXrxYaZqmvv/+e7VgwQId0/1XXV2devTRR1VxcbHb83ofwyNHjqjjx4+rJ554wvXchg0bVE5OjlJKqZycHLVhw4ZG21VWVqpZs2apyspKt7/1yFdQUKCcTqcrq6d8Snn/LAQqX3Z2tvrwww+vup0v3/dA5Wto3bp16r333vO4TI/j56922QxVWFhIYmIiCQkJmM1mUlJSyMvLc1vnwIEDrl9vw4cP5+uvv9Zt4p/Y2FjXL/Dw8HC6du2K3W7XZd+t6cCBA/zqV7/CYDDQt29fqqurKSsr0z3H4cOHSUxMJD4+Xvd9N3TzzTc3OmvIy8tj1KhRAIwaNarR5xDqfxUPGjSIqKgooqKiGDRoEAUFBbrk++Uvf4nJZAKgb9++Qf0cesrnC1++74HOp5Ri//79jBgxotX3q5d22Qxlt9uxWq2ux1arlWPHjjW5jslkIiIigsrKStfprl6Ki4s5efIkN954Y6NlR48eZd68ecTGxvLQQw/RvXt3XbMBLF68GIA777yTtLQ0t2V2u524uDjXY6vVit1uJzY2VteM+/bta/JLGuxjWF5e7joenTp1ory8vNE6V35eLRZLUP5p79y5k5SUlCaXX+2zEEhbt25lz5499O7dm4cffrjRP2xfvu+B9u233xITE0NSUlKT6wTr+PmqXRaLa4XD4WDFihVMmTKFiIgIt2W9evVi9erVhIWFkZ+fz/Lly3nttdd0zbdo0SIsFgvl5eW88MILdOnShZtvvlnXDN44nU4OHjzIgw8+2GhZWziGDRkMBq8TcwXLBx98gMlk4vbbb/e4PFifhfT0dFc/U3Z2NuvXr2fmzJkB329zXe0HC1wb36V22QxlsVgoLS11PS4tLcVisTS5Tl1dHRcvXiQ6Olq3jE6nkxUrVnD77bczbNiwRssjIiJcs9YNGTKEuro6KioqdMsHuI5ZTEwMQ4cOpbCwsNHyhpM0eTrOgfbll1/Sq1cvOnXq1GhZWziGMTExrqa5srIyj2euV35e7Xa7rsdx9+7dHDx4kDlz5jRZzLx9FgKlU6dOGI1GjEYjqampHD9+3GM2b9/3QKqrq+OLL7646llZsI5fc7TLYpGcnExRURHFxcU4nU5yc3Ox2Wxu69x6663s3r0bgM8++4wBAwbo9qtPKcVf//pXunbtSkZGhsd1Lly44OpDKSwsRNM0XYuZw+Hg0qVLrr+/+uorevTo4baOzWZjz549KKU4evQoERERbaoJKtjHEOqP0aeffgrAp59+ytChQxutM3jwYA4dOkRVVRVVVVUcOnSIwYMH65KvoKCADz/8kKeeeorQ0FCP6/jyWQiUhn1gX3zxhcdmRF++74F0+PBhunTp4tYU1lAwj19ztNs7uPPz81m3bh2apjFmzBjuvfdesrOzSU5OxmazcfnyZV5//XVOnjxJVFQUc+fOJSEhQZds3333HQsXLqRHjx6uAvXAAw+4fqWnp6ezZcsWtm3bhslkokOHDjz88MP069dPl3wA586d4+WXXwbqfzmNHDmSe++9l23btrkyKqXIysri0KFDdOjQgZkzZ5KcnKxbRofDwcyZM3n99dddzXgN8+l9DF999VW++eYbKisriYmJYdKkSQwdOpSVK1dSUlLiduns8ePH+eSTT3jssceA+v6CnJwcoP7S2TFjxuiSLycnB6fT6eoH6NOnD9OnT8dut7NmzRoWLFjQ5GdBj3xHjhzhhx9+wGAwEB8fz/Tp04mNjXXLB56/73rku+OOO3jjjTfo06cP6enprnWDcfz81W6LhRBCCN+1y2YoIYQQzSPFQgghhFdSLIQQQnglxUIIIYRXUiyEEEJ4JcVCiDZg0qRJnD17NtgxhGiSDPchxBVmzZrFhQsXMBr/+1tq9OjRZGZmBjGVZ1u3bqW0tJQHH3yQ5557jqlTp3LDDTcEO5a4DkmxEMKDp556ikGDBgU7hlcnTpxgyJAhaJrGTz/9RLdu3YIdSVynpFgI0Qy7d+9mx44d9OzZkz179hAbG0tmZia/+MUvgPo7c998802+++47oqKiuOeee1wjiGqaxj//+U927dpFeXk5SUlJzJs3zzUy71dffcWSJUuoqKhg5MiRZGZmeh1i5sSJE0ycOJEzZ84QHx/vGk5ciNYmxUKIZjp27BjDhg0jKyuLL774gpdffpk33niDqKgoVq1aRffu3VmzZg1nzpxh0aJFJCYmMnDgQD7++GP27dvHggULSEpK4tSpU27jLeXn57N06VIuXbrEU089hc1m8zgGVG1tLdOmTUMphcPhYN68eTidTjRNY8qUKYwfP75NDhchrm1SLITwYPny5W6/0idPnuw6Q4iJiWHcuHEYDAZSUlL46KOPyM/P5+abb+a7777j6aefpkOHDvTs2ZPU1FQ+/fRTBg4cyI4dO5g8eTJdunQBoGfPnm77nDBhApGRkURGRjJgwAB++OEHj8UiJCSEt99+mx07dnD69GmmTJnCCy+8wP333+9x3hMhWoMUCyE8mDdvXpN9FhaLxa15KD4+HrvdTllZGVFRUYSHh7uWxcXFuYbNLi0tvepglA2HUQ8NDcXhcHhc79VXX6WgoICamhpCQkLYtWsXDoeDwsJCkpKSWLp0abPeqxC+kGIhRDPZ7XaUUq6CUVJSgs1mIzY2lqqqKi5duuQqGCUlJa65CqxWK+fOnfN7+Om5c+eiaRrTp0/nb3/7GwcPHmT//v3MmTPHvzcmxFXIfRZCNFN5eTmbN2/G6XSyf/9+fvrpJ2655Rbi4uLo168ff//737l8+TKnTp1i165drtnlUlNTyc7OpqioCKUUp06dorKyskUZfvrpJxISEjAajZw8eVLXod9F+yRnFkJ48OKLL7rdZzFo0CDmzZsH1M/pUFRURGZmJp06deKJJ55wTZr0+9//njfffJMZM2YQFRXFb37zG1dzVkZGBrW1tbzwwgtUVlbStWtXnnzyyRblO3HiBL169XL9fc899/jzdoXwSuazEKIZfr50dtGiRcGOIoSupBlKCCGEV1IshBBCeCXNUEIIIbySMwshhBBeSbEQQgjhlRQLIYQQXkmxEEII4ZUUCyGEEF79f8xwbCCteGbmAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot Results\n",
    "\n",
    "N=NUM_EPOCHS\n",
    "\n",
    "plt.style.use(\"ggplot\")\n",
    "plt.figure()\n",
    "plt.plot(np.arange(0, N), hist.history[\"loss\"], label=\"train_loss\")\n",
    "plt.plot(np.arange(0, N), hist.history[\"val_loss\"], label=\"val_loss\")\n",
    "\n",
    "plt.title(\"Training/Validation Loss on Dataset\")\n",
    "plt.xlabel(\"Epoch #\")\n",
    "plt.ylabel(\"Loss\")\n",
    "plt.legend(loc=\"lower left\")\n",
    "\n",
    "plt.savefig(''.join(['plot_loss-',WEIGHTS_FINAL,'.png']))\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(np.arange(0, N), hist.history[\"accuracy\"], label=\"train_acc\")\n",
    "plt.plot(np.arange(0, N), hist.history[\"val_accuracy\"], label=\"val_acc\")\n",
    "\n",
    "plt.title(\"Training/Validation Accuracy on Dataset\")\n",
    "plt.xlabel(\"Epoch #\")\n",
    "plt.ylabel(\"Accuracy\")\n",
    "plt.legend(loc=\"lower left\")\n",
    "\n",
    "plt.savefig(''.join(['plot_acc-',WEIGHTS_FINAL,'.png']))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 2516 images belonging to 9 classes.\n"
     ]
    }
   ],
   "source": [
    "# test model\n",
    "\n",
    "test_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)\n",
    "test_batches = test_datagen.flow_from_directory(DATASET_PATH + '/test',\n",
    "                                                  target_size=IMAGE_SIZE,\n",
    "                                                  interpolation='bicubic',\n",
    "                                                \n",
    "                                                  class_mode='categorical',\n",
    "                                                  shuffle=False,\n",
    "                                                  batch_size=1,\n",
    "                                                  classes=['1','2','3','4','5','6','7','8','9+'])\n",
    "\n",
    "# out = model.evaluate_generator(test_batches, use_multiprocessing=True)\n",
    "# print(list(zip(model.metrics_names,out)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_batches.reset()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "Y_pred = model.predict_generator(test_batches, use_multiprocessing=True)\n",
    "# print(len(Y_pred))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      " Classification Report\n",
      "\n",
      "['1', '2', '3', '4', '5', '6', '7', '8', '9+']\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           1       0.72      0.92      0.81       225\n",
      "           2       0.90      0.83      0.87      1096\n",
      "           3       0.44      0.28      0.34       234\n",
      "           4       0.64      0.76      0.70       519\n",
      "           5       0.34      0.25      0.29       127\n",
      "           6       0.35      0.44      0.39       133\n",
      "           7       0.00      0.00      0.00        33\n",
      "           8       0.11      0.03      0.05        33\n",
      "          9+       0.54      0.79      0.64       116\n",
      "\n",
      "    accuracy                           0.70      2516\n",
      "   macro avg       0.45      0.48      0.45      2516\n",
      "weighted avg       0.69      0.70      0.69      2516\n",
      "\n",
      "\n",
      "\n",
      "Confusion Matrix\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_pred = np.argmax(Y_pred, axis=1)\n",
    "\n",
    "print('\\n\\n Classification Report\\n')\n",
    "target_names = list(test_batches.class_indices.keys())\n",
    "print(target_names)\n",
    "print(classification_report(list(test_batches.classes), y_pred, target_names=target_names))\n",
    "\n",
    "\n",
    "\n",
    "print('\\n\\nConfusion Matrix\\n')\n",
    "\n",
    "cm = confusion_matrix(test_batches.classes, y_pred)\n",
    "\n",
    "row_sums = cm.sum(axis=1)\n",
    "cm = cm.T / row_sums\n",
    "cm = cm.T\n",
    "# df_cm = pd.DataFrame(cm, index = ['cocklebur','foxtail','pigweed','ragweed'], columns = ['cocklebur','foxtail','pigweed','ragweed'])\n",
    "\n",
    "df_cm = pd.DataFrame(cm)\n",
    "# print(df_cm)\n",
    "\n",
    "\n",
    "# flights = df_cm.pivot(\"month\", \"year\", \"passengers\")\n",
    "\n",
    "\n",
    "plt.figure(figsize = (5,5))\n",
    "\n",
    "plt.title(modelName)\n",
    "sn.heatmap(df_cm, annot=True, fmt='0.0%', cbar=False, \n",
    "           xticklabels=['1','2','3','4','5','6','7','8','9+'],\n",
    "           yticklabels=['1','2','3','4','5','6','7','8','9+'])\n",
    "\n",
    "\n",
    "saveName = ''.join([modelName,'-',dataset,'.png'])\n",
    "plt.savefig(saveName)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "position": {
    "height": "144.427px",
    "left": "1378.32px",
    "right": "20px",
    "top": "122.997px",
    "width": "350px"
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
